給表單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>