|
|
使用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;}} |
|