1. 程式人生 > >Struts2做檔案上傳,底層封裝了Fileupload

Struts2做檔案上傳,底層封裝了Fileupload

檔案上傳要素:

表單提交方式必須是post

表單中有<input type="File" name="upload">

提供工具類

public class UploadUtils {
    // 解決檔名重複
    public static String getUUIDFileName(String fileName) {
        int idx = fileName.lastIndexOf(".");
        String extions = fileName.substring(idx);
        return UUID.randomUUID().toString().replace("-", "") + extions;
    }

    public static void main(String[] args) {
        System.out.println(UploadUtils.getUUIDFileName("aa.txt"));
    }

表單的enctype屬性必須為"multipart/form-data"

Action中提供3個屬性,有set方法

private String uploadFileName;// 檔名稱
    private File upload;// 檔案本身
    private String uploadContentType;// 檔案型別

if (upload != null) {
            // 檔案上傳的路徑
            String path = "C:/upload";
            // 一個檔案目錄下相同檔名的解決
            String uuidFileName = UploadUtils.getUUIDFileName(uploadFileName);
            // 建立目錄
            File file = new File(path);
            // 檔案上傳
            File dictFile = new File(path + "/" + uuidFileName);
            FileUtils.copyFile(upload, dictFile);

        }
        customerService.save(customer);

設定上傳限制

<!--上傳總量大小常量  -->
    <constant name="struts.multipart.maxSize" value="5242880"/>

在<action>標籤中修改預設攔截器引數

<interceptor-ref name="defaultStack">
    <!-- 上傳單個檔案最大值 -->
    <param name="fileUpload.maximumSize">2097152</param>
    <!-- 檔案字尾名,格式-->
    <param name="fileUpload.allowedExtensions">.jpg,.bmp</param>
    
</interceptor-ref>

假如上傳資訊不規範,如超過檔案最大值,在最好一個攔截器workflow檢查沒有通過會返回一個input為空的檢視

解決

在<action>標籤中加上,並在相應頁面上回響錯誤資訊<s:actionerror/>

<result name="input">/jsp/customer/add.jsp</result>