在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"的镜像文件,然后单击上传。