JAVA文件上傳 ServletFileUpload
參考這個:https://www.cnblogs.com/liuyangv/p/8298997.html
Java文件上傳 MultipartFile
1. 配置MultipartResolver
defaultEncoding="UTF-8" 是請求的編碼格式,默認為iso-8859-1
maxUploadSize="1048576" 是上傳文件的大小,單位為字節
uploadTempDir="fileUpload/temp" 為上傳文件的臨時路徑
2.前台表單
1 <form enctype="multipart/form-data" id="J_uploadLocalImgForm" method="post"> 2 <input type="hidden" name="authVenderId"> 3 <input type="file" class="hide" id="J_uploadLocalImgFile" name="multipartFile" multiple=""> 4 </form>
input 標簽上寫上multiple 這個時候就可以選擇多個文件進行上傳,去掉就不支持多選了
3. js 控制驗證上傳文件格式
一般的話 可能直接就再js中以什么結尾來判斷格式,但這樣是不准確的,如果文件的后綴被改掉呢? 如果你對文件格式要求嚴格的話,那最好在后台做一個比較嚴謹的驗證。
var urlType = urlStr.substring(urlStr.lastIndexOf(".") + 1, urlStr.length); urlType = urlType.toLowerCase(); if (urlType == "jpg" || urlType == "png" || urlType == "jpeg" || urlType == "gif" || urlType == "bmp") {}
4.java代碼
Controller層
/** * 本地圖片上傳 * @param multipartFile multipartFiles * @return CallbackResult<String> */ @RequestMapping("/multipleUploadWatermarkImg") public @ResponseBody CallbackResult<?> multipleUploadWatermarkImg(@RequestBody MultipartFile[] multipartFile){ return service.multipleUploadWatermarkImg(multipartFile); }
這里有個地方,MultipartFile 后面加的這個[ ] 代表數組嘛,支持多個文件上傳,如果就是單個文件的話,去掉就可以了,和前面前台是對應的
Service層這里就不寫了,就是對multipartFile文件進行處理,如果是多個文件就先循環在處理,這里寫幾個MultipartFile的方法
- getOriginalFilename()文件的路徑
- getName()返回表單中參數的名稱。
- getInputStream()返回一個InputStream以從中讀取文件的內容。通過此方法就可以獲取到流
- getContentType()返回文件的內容類型
- getSize()以字節為單位返回文件的大小
- isEmpty()返回上傳的文件是否為空,即,在多部分表單中沒有選擇任何文件,或者所選文件沒有內容。
- transferTo將收到的文件傳輸到給定的目標文件
這里的transferTo 很好用的,直接可以把文件保存到制定路徑 multipartFile.transferTo(new File(path))
ServletFileUpload與MultipartFile沖突的問題
問題是倆個同時存在,其中一個使用時會獲取不到上傳文件,網上有人給出了解決方法,不過我沒有去驗證,
http://www.itkeyword.com/doc/8187524065876327482/ServletFileUpload-MultipartResolver-javaSpring
這里還有一個我遇到的小問題,當上傳文件過大時該怎么辦?
https://bbs.csdn.net/topics/392015065?locationNum=9&fps=1
這里有人給了個捕獲異常的方法,但是我覺得有點太麻煩了,如果允許的話不如在前台進行判斷
uploadLocalImgFile : function(e) { var file = e.target.files[0]; if(file.type == "image/png" || file.type == "image/jpeg" || file.type == "image/jpg" || file.type == "image/gif"){ if(file.size > 1024 * 1024){ swal("上傳圖片的大小不能超過1M","","warning"); return false; }
} }