给表单form设置属性:enctype="multipart/form-data",为了保证file文件内容能正常传递。html
注意保持表单中的action名称与struts.xml中设置的一致,为了保证经过配置文件可以找处处理表单action类。java
在struts.xml应设置常量<constant name="struts.multipart.saveDir" value="/tmp">。这是由于文件上传时在内存中须要一个临时存储该文件内容的地方也即"/tmp"只是个临时中转站。若没有配置该常量,后台会报not found struts.multipart.saveDir"错。web
由于上传的文件是存储在服务器下的(我这里是将文件保存在web应用目录upload文件下),所以事先必须先建立upload文件不然出现没法找到相应路径异常。apache
相关代码:jsp页面 服务器
<form action="Upload" method="post" enctype="multipart/form-data"> <table> <tr> <td>上传文件:<input type="file" name="file"></td></tr> <tr><td><input type="submit" value="上传"/></td></tr> </table> </form>
struts.xml配置文件jsp
<package name="default" extends="struts-default"> <action name="Upload" class="com.action.UploadAction"> <result name="success">/successUpload.jsp</result> </action> </package>
处理上传文件类UploadActionide
package com.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 static final long serialVersionUID = 1L; private File file; 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; } private String fileFileName; private String fileContentType; @Override public String execute() throws Exception { // TODO Auto-generated method stub InputStream inputStream = new FileInputStream(this.getFile()); String path = ServletActionContext.getServletContext().getRealPath("/upload"); System.out.println("得到的路径为:"+path); OutputStream outputStream = new FileOutputStream(new File(path,fileFileName)); byte buffer[] = new byte[1024]; int length = 0; while((length=inputStream.read(buffer))>0){ outputStream.write(buffer,0,length); } outputStream.close(); inputStream.close(); return SUCCESS; } }
验证文件是否上传成功:successUpload.jsp页面post
<body> 上传文件名:${fileFileName} <br/> 上传文件类型:${fileContentType} </body>