首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Struts 2 文件上傳完整指南:單文件、多文件、類型大小限制與國際化錯誤提示

     編輯:Java 相關知識

Struts 2 基於 Commons FileUpload 實現文件上傳,核心在於 <s:file> 標簽與 Action 屬性約定式綁定。本文以 Struts 2.0.6 為基線,覆蓋 JSP 頁面、Action 處理、攔截器配置、錯誤處理、多文件上傳全流程。

核心約定:<s:file name="myFile"> 自動綁定三屬性

Action 屬性含義
myFile (File)上傳文件臨時存儲路徑
myFileContentType (String)MIME 類型(如 image/jpeg)
myFileFileName (String)原始文件名(不含路徑)

單文件上傳最小配置

1. JSP 表單

<s:form action="fileUpload" method="POST" enctype="multipart/form-data">
    <s:file name="myFile" label="Image File"/>
    <s:textfield name="caption" label="Caption"/>
    <s:submit/>
</s:form>

2. Action 處理

public class FileUploadAction extends ActionSupport {
    private File myFile;
    private String myFileContentType;
    private String myFileFileName;
    private String caption;

    // Setter 省略...

    public String execute() {
        String ext = myFileFileName.substring(myFileFileName.lastIndexOf('.'));
        String newName = System.currentTimeMillis() + ext;
        File dest = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages"), newName);
        copy(myFile, dest); // 緩衝流拷貝
        this.imageFileName = newName; // 供結果頁顯示
        return SUCCESS;
    }
}

3. struts.xml 配置 fileUploadStack

<action name="fileUpload" class="tutorial.FileUploadAction">
    <interceptor-ref name="fileUploadStack"/>
    <result name="success">/ShowUpload.jsp</result>
</action>

進階:文件類型與大小限制

替換 fileUploadStack 為細粒度 fileUpload 攔截器 + defaultStack:

<interceptor-ref name="fileUpload">
    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
    <param name="maximumSize">2097152</param> <!-- 2MB -->
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
<result name="input">/FileUpload.jsp</result> <!-- 驗證失敗返回 -->

JSP 添加 <s:fielderror/> 顯示錯誤。國際化覆蓋 struts.messages.error.content.type.not.allowed、struts.messages.error.file.too.large 等鍵值實現自定義提示。

多文件上傳:數組或 List 綁定

<s:file name="upload" label="File (1)"/>
<s:file name="upload" label="File (2)"/>
<s:file name="upload" label="File (3)"/>

Action 綁定數組

private File[] uploads;
private String[] uploadFileNames;
private String[] uploadContentTypes;
// 對應 Setter...

Action 綁定 List(推薦)

private List<File> uploads = new ArrayList<>();
private List<String> uploadFileNames = new ArrayList<>();
private List<String> uploadContentTypes = new ArrayList<>();
// 對應 Setter...

Struts 2 自動按順序注入,索引一一對應。

臨時文件目錄配置

控制台提示 struts.multipart.saveDir 未設置,默認用 Servlet 容器臨時目錄。在 struts.properties 指定:

struts.multipart.saveDir=/tmp

目錄不存在會自動創建。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved