struts2-corecommons-fileuploadcommons-io
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<package name="default" extends="struts-default">
<action name="myupload" class="com.xmgc.sc.action.MyUpLoadAction">
<result name="success">/uploadResult.jsp</result>
</action>
</package>
public class MyUpLoadAction {
private String title; // 普通字段
private File upload; // 上傳文件(屬性名 = )
private String uploadContentType; // 文件 MIME 類型(屬性名 = upload + ContentType)
private String uploadFileName; // 原始文件名(屬性名 = upload + FileName)
// Getter/Setter 省略...
public String execute() throws IOException {
System.out.println("Title: " + title);
System.out.println("ContentType: " + uploadContentType);
System.out.println("FileName: " + uploadFileName);
// 獲取 Web 根路徑下 myupload 目錄
String realPath = ServletActionContext.getServletContext().getRealPath("/");
String destPath = realPath + "myupload/" + uploadFileName;
// 流式複製
try (FileInputStream fis = new FileInputStream(upload);
FileOutputStream fos = new FileOutputStream(destPath)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
return "success";
}
}
<form action="myupload.action" method="post" enctype="multipart/form-data">
文件名:<input type="text" name="title"/><br/>
上傳:<input type="file" name="upload"/><br/>
<input type="submit" value="上傳"/>
</form>
enctype="multipart/form-data" 讓瀏覽器以多部分形式發送二進制數據。FileUploadInterceptor 攔截請求,將文件保存到臨時目錄,自動注入 File、ContentType、FileName 三個屬性。struts.xml 配置 <constant name="struts.multipart.maxSize" value="10485760"/>(10MB)。