使用Struts2结束common的fileupload和io两个包进行上传下载开发
首先编写upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags"%> <html> <body> <s:form action="upload" theme="simple" enctype="multipart/form-data"> <table align="center" width="40%"> <tr> <td>username:</td> <td><s:textfield name="username"></s:textfield></td> </tr> <tr> <td>password:</td> <td><s:password name="password"></s:password></td> </tr> <tr> <td>file:</td> <td><s:file name="file"></s:file></td> </tr> <tr> <td><s:submit></s:submit></td> <td><s:reset></s:reset></td> </tr> </table> </s:form> </body> </html>
配置struts.xml文件
<constant name="struts.i18n.encoding" value="gbk"></constant> <!--将struts2的默认编码改为gbk --> <constant name="struts.multipart.saveDir" value="c:\\"></constant> <action name="upload" class="com.test.action.UploadAction"> <result name="success">/uploadResult.jsp</result> </action>
UploadAction.java,上传的文件会放入WebRoot/upload目录下
package com.test.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private String username; private String password; private File file; //下面两个变量是文件名与文件类型,Struts2会自动为以下两变量赋值 private String fileFileName; private String fileContentType; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public File getFile() { return file; } public void setFile(File file) { this.file = file; } public String getFileFileName() { return fileFileName; } public void setFileFileName(String fileFileName) { this.fileFileName = fileFileName; } public String getFileContentType() { return fileContentType; } public void setFileContentType(String fileContentType) { this.fileContentType = fileContentType; } public String execute() throws Exception { //所谓文件上传,其实就是一个输入输出的操作,从一个输入流写到一个输出流。 InputStream is = new FileInputStream(file); String root = ServletActionContext.getRequest().getRealPath("upload"); File destFile = new File(root,this.getFileFileName()); OutputStream os = new FileOutputStream(destFile); byte[] buffer = new byte[400]; int length = 0; while((length= is.read(buffer)) > 0){ os.write(buffer, 0, length); } is.close(); os.close(); return SUCCESS; } }
uploadResult.jsp得到返回的结果
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%> <%@ taglib prefix="s" uri="/struts-tags" %> <html> <body> username:<s:property value="username"/><br> password:<s:property value="password"/><br> file:<s:property value="fileFileName"/> </body> </html>
如何上传指定个数的文件?如同时上传3个,则需要修改action类,使用集合类来支持
package com.test.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private String username; private String password; private List<File> file; //下面两个变量是文件名与文件类型,Struts2会自动为以下两变量赋值 private List<String> fileFileName; private List<String> fileContentType; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public List<File> getFile() { return file; } public void setFile(List<File> file) { this.file = file; } public List<String> getFileFileName() { return fileFileName; } public void setFileFileName(List<String> fileFileName) { this.fileFileName = fileFileName; } public List<String> getFileContentType() { return fileContentType; } public void setFileContentType(List<String> fileContentType) { this.fileContentType = fileContentType; } public String execute() throws Exception { for(int i = 0;i < file.size(); i++){ InputStream is = new FileInputStream(file.get(i)); String root = ServletActionContext.getRequest().getRealPath("upload"); File destFile = new File(root,this.getFileFileName().get(i)); OutputStream os = new FileOutputStream(destFile); byte[] buffer = new byte[400]; int length = 0; while((length= is.read(buffer)) > 0){ os.write(buffer, 0, length); } is.close(); os.close(); } return SUCCESS; } }