在使用 Struts 2 框架處理多檔案上傳時,前端常使用 name="uploadFile[0].file" 這類陣列命名方式。後端 Action 需要正確對應接收。
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile[0].file" />
<input type="file" name="uploadFile[1].file" />
<input type="file" name="uploadFile[2].file" />
<input type="submit" value="上傳" />
</form>
public class UploadAction extends ActionSupport {
// 對應 uploadFile[0].file, uploadFile[1].file ...
private List<File> uploadFile;
private List<String> uploadFileFileName; // 原始檔名
private List<String> uploadFileContentType; // MIME 類型
// Getter/Setter 省略...
@Override
public String execute() {
if (uploadFile != null) {
for (int i = 0; i < uploadFile.size(); i++) {
File file = uploadFile.get(i);
String fileName = uploadFileFileName.get(i);
String contentType = uploadFileContentType.get(i);
// 處理檔案儲存邏輯
saveFile(file, fileName);
}
}
return SUCCESS;
}
}
uploadFile[0].file 綁定到 List<File> uploadFile屬性名 + FileName(如 uploadFileFileName)屬性名 + ContentType(如 uploadFileContentType)List 而非陣列,靈活性較高<action name="upload" class="com.example.UploadAction">
<interceptor-ref name="fileUpload">
<param name="maximumSize">10485760</param> <!-- 10MB -->
<param name="allowedTypes">image/jpeg,image/png,application/pdf</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<result name="success">/upload_success.jsp</result>
<result name="input">/upload.jsp</result>
</action>
enctype="multipart/form-data"maximumSize 參數掌握這些核心概念,即可輕鬆處理 Struts 2 的多檔案陣列上傳需求。