在Struts 2中上传文件
本教程我们将学习如何将文件上传到Struts 2中的服务器2以及如何在服务器计算机目录上保存上传的文件。
Struts 2的文件上传组件可用于2 application.The Struts的文件上传拦截器是基于MultiPartRequestWrapper,会自动被应用到上传mulitpart文件中的支柱2个application.Struts内置文件上传拦截2个利用在支柱上载文件请求如果它包含文件元素。
Action类
为了在Struts 2中添加文件上传功能,我们将创建名为fileuploadaction.java的动作类。
创建包org.arpit.javaPostsForLearning src文件夹下的文件FileUploadAction.java。
在fileuploadaction.java中复制以下内容
package org.arpit.javaPostsForLearning;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.interceptor.ServletRequestAware;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport implements ServletRequestAware {
private File toBeUploaded;
private String toBeUploadedFileName;
private String toBeUploadedContentType;
private HttpServletRequest servletRequest;
public String execute()
{
String filePath = servletRequest.getSession().getServletContext().getRealPath("/");
File fileToCreate = new File(filePath, this.toBeUploadedFileName);
try {
FileUtils.copyFile(this.toBeUploaded, fileToCreate);
} catch (IOException e) {
addActionError(e.getMessage());
}
return SUCCESS;
}
public File getToBeUploaded() {
return toBeUploaded;
}
public void setToBeUploaded(File toBeUploaded) {
this.toBeUploaded = toBeUploaded;
}
public String getToBeUploadedFileName() {
return toBeUploadedFileName;
}
public void setToBeUploadedFileName(String toBeUploadedFileName) {
this.toBeUploadedFileName = toBeUploadedFileName;
}
public String getToBeUploadedContentType() {
return toBeUploadedContentType;
}
public void setToBeUploadedContentType(
String toBeUploadedFileNameContentType) {
this.toBeUploadedContentType = toBeUploadedFileNameContentType;
}
@Override
public void setServletRequest(HttpServletRequest servletRequest) {
this.servletRequest=servletRequest;
}
}
现在我们在这里声明了三个属性
私有文件tobeuploaded //实际文件要上传私有字符串
tobeuploadedfileName //文件名要上载的实际文件的私有字符串
toveuploadedcontenttype //内容类型的实际文件要上载
我们为上述属性提供了Getters和Setter.so Struts 2根据正在上载的文件自动设置这些值。
例如,如果你的文件名是"sampleFile",然后在Struts 2拦截器添加三个参数,要求有三个参数:[sampleFile]:文件[sampleFile]文件名:字符串[sampleFile]的ContentType:字符串
你可以在这里看到,我们已经给了我们相同的格式动作类的属性,因此将根据文件被上传自动设置这些属性。
还有一件事是,我们已经实现了我们的动作类"ServletRequestAware"界面这是得到的ServletRequest object.This请求对象是需要得到服务器的机器,其中文件是要上传的路径。
JSP:
我们将在此处创建两个JSP文件。
FileUpload.jsp将显示用于上载文件的表单。
单击上载按钮,文件将保存在服务器计算机上,请求将转发以升级为oploadsucceed.jsp,它将呈现文件名,内容类型和上传的图像。
fileupload.jsp:
在WebContent文件夹下创建FileUpload.jsp。
将以下内容复制到fileupload.jsp。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>file upload page</title>
</head>
<body bgColor="lightblue">
<s:form action="fileUpload" method="post" enctype="multipart/form-data">
<s:file name="toBeUploaded" label="Choose file to upload"
<s:submit value="Upload" align="center"
</s:form>
</body>
</html>
我们已使用标签进行文件上传界面。
uploadsucceed.jsp:在WebContent文件夹下创建名为"UploadSucceed.jsp"的JSP。
将以下内容复制到UploadSucceed.jsp中。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Upload Successful</title>
<s:head
</head>
<body>
File Name :
<s:property value="toBeUploadedFileName"></s:property>
Content type:
<s:property value="toBeUploadedContentType"></s:property>
User file :
<s:property value="toBeUploaded"></s:property>
Uploaded file:
"></img>
</body>
</html>
在SRC文件夹下创建Struts.xml。
将以下内容复制到Struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="fileUpload" class="org.arpit.javaPostsForLearning.FileUploadAction">
<interceptor-ref name="fileUpload">
<param name="maximumSize">1048576</param>
<param name="allowedTypes">
image/png,image/gif,image/jpeg,image/pjpeg
</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">uploadSucceed.jsp</result>
<result name="input">fileUpload.jsp</result>
</action>
</package>
</struts>
web.xml:
除了我们将欢迎文件更改为"fileupload.jsp"将内容复制到Web.xml之外,它与之前的文章相同
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="fileUpload" class="org.arpit.javaPostsForLearning.FileUploadAction">
<interceptor-ref name="fileUpload">
<param name="maximumSize">1048576</param>
<param name="allowedTypes">
image/png,image/gif,image/jpeg,image/pjpeg
</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">uploadSucceed.jsp</result>
<result name="input">fileUpload.jsp</result>
</action>
</package>
</struts>
运行项目:
右键单击项目 - >在服务器上运行 - >在服务器上运行 - 浏览器中的服务器复制结果URL(http://localhost:8080/fileuploadInstruts2 /)。
现在我们将浏览这里的文本文件,然后单击上传。
现在再次复制http://localhost:8080/fileuploadInstruts2/URL到浏览器,然后按Enter键将再次获取第一个屏幕。
我们将浏览名为"nature.jpeg"的镜像文件,然后单击上传。

