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>