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

Struts 2 文件上傳與客戶端驗證實作指南

     編輯:Java 相關知識

文件上傳核心組件

Struts 2 文件上傳依賴 commons-fileupload 與 commons-io,透過 FileUploadInterceptor 自動處理 multipart/form-data 請求。

Action 類設計

public class UploadAction extends ActionSupport {
    private File upload;              // 上傳檔案
    private String uploadContentType; // 檔案 MIME 類型
    private String uploadFileName;    // 原始檔名

    // Getter/Setter 省略

    @Override
    public String execute() {
        String destPath = ServletActionContext.getServletContext().getRealPath("/uploads");
        File destDir = new File(destPath);
        if (!destDir.exists()) destDir.mkdirs();

        File destFile = new File(destDir, uploadFileName);
        try {
            Files.copy(upload.toPath(), destFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
            addActionMessage("上傳成功:" + uploadFileName);
            return SUCCESS;
        } catch (IOException e) {
            addActionError("上傳失敗:" + e.getMessage());
            return ERROR;
        }
    }
}

JSP 上傳表單

<s:form action="upload" enctype="multipart/form-data">
  <s:file name="upload" label="選擇檔案"/>
  <s:submit value="上傳"/>
</s:form>

struts.xml 配置與攔截器參數

<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_result.jsp</result>
  <result name="error">/upload_error.jsp</result>
</action>

客戶端驗證

1. Struts 2 內建驗證框架(伺服器端)

// UploadAction-validation.xml
<validators>
  <field name="upload">
    <field-validator type="required">
      <message>請選擇要上傳的檔案</message>
    </field-validator>
    <field-validator type="fieldexpression">
      <param name="expression">uploadContentType.startsWith('image/')</param>
      <message>僅允許圖片檔案</message>
    </field-validator>
  </field>
</validators>

2. JavaScript 客戶端預檢(提升體驗)

<script>
function validateUpload() {
    var fileInput = document.getElementById('upload');
    var file = fileInput.files[0];
    if (!file) { alert('請選擇檔案'); return false; }
    if (file.size > 10 * 1024 * 1024) { alert('檔案不可超過 10MB'); return false; }
    var allowed = ['image/jpeg', 'image/png', 'application/pdf'];
    if (!allowed.includes(file.type)) { alert('僅支援 JPG、PNG、PDF'); return false; }
    return true;
}
</script>

<s:form action="upload" enctype="multipart/form-data" onsubmit="return validateUpload()"> ... </s:form>

進階主題

  • 多檔上傳:Action 定義 List<File> uploads,JSP 多個 <s:file name="uploads"/>
  • 進度條:需配合 Servlet 3.0 @MultipartConfig + AJAX 輪詢或 WebSocket
  • 雲端儲存:上傳後直接轉存至 S3/OSS,不佔用應用伺服器磁碟
  • 安全性:檔案類型驗證需結合 Magic Number 檢測,防止偽裝副檔名

總結

Struts 2 文件上傳核心在於 FileUploadInterceptor 自動綁定 File、contentType、fileName 三屬性。結合伺服器端驗證框架與 JavaScript 客戶端預檢,可構建安全、友善的上傳體驗。生產環境建議加入檔案內容檢測、病毒掃描與雲端儲存整合。

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