Struts2 本身不含文件上傳實現,而是通過攔截器整合 Commons FileUpload、COS 等開源庫。核心流程:
JakartaMultiPartRequest(基於 Commons FileUpload),解析 multipart/form-data 請求,生成 FileItem 列表,按表單 name 分組存入 Map,文件先寫入臨時目錄ActionContext:表單名 (File/Array/List)、表單名ContentType、表單名FileName| 參數 | 說明 | 默認值 |
|---|---|---|
| struts.multipart.parser | Request 解析器 | jakarta |
| struts.multipart.saveDir | 臨時目錄 | Servlet 容器臨時目錄 |
| struts.multipart.maxSize | 總上傳大小限制 (Byte) | 2097152 (2MB) |
| maximumSize | 單文件大小限制 | 無 |
| allowedTypesSet | 允許 MIME 類型(逗號分隔) | 無 |
| allowedExtensionsSet | 允許擴展名(逗號分隔) | 無 |
<action name="Upload" class="com.bond.action.UploadAction">
<param name="savePath">/upload</param>
<interceptor-ref name="fileUpload">
<param name="maximumSize">10240000000</param>
<param name="allowedTypesSet">application/zip,application/pdf,image/gif</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/> <!-- 必須保留,否則缺少參數映射 -->
</action>
private File[] upload; // 單文件用 File,多文件用 File[]/List<File>
private String[] uploadContentType; // MIME 類型
private String[] uploadFileName; // 原始文件名
private String savePath; // 目標保存路徑
defaultStack 已含 fileUpload,重複引用會導致攔截器執行兩次、臨時文件刪除兩次日誌