上傳檔案注意事項
阿新 • • 發佈:2019-01-14
上傳檔案注意事項
客戶端
使用form形式multiform-data形式上傳檔案
服務端接收處理方式
1.頁面傳入HttpServletRequest request
2.判斷request instanceof MultipartHttpServletRequest 若成功則繼續進入以下步驟
3.強制型別轉換
multipartHttpServletRequest = (MultipartHttpServletRequest) request;
4.獲取MultipartFile
MultipartFile file = multipartHttpServletRequest.getFile(“uploadImg”);
//備註:uploadImg為form表單中input的name屬性值
5.處理MultipartFile multipartFile
方式1.利用臨時檔案上傳圖片
1.將file內容傳遞給臨時檔案
String originalFileName = multipartFile.getOriginalFilename(); File tempFile= null; if (StringUtils.isBlank(originalFileName) || !originalFileName.contains(".")) { log.error("uploadImg fileName 為空或者不會包含[.],fileName:{}", originalFileName); } else { tempFile= File.createTempFile("student", "." + getFileSuffix(originalFileName)); multipartFile.transferTo(tempFile); }
2.將臨時檔案上傳到伺服器
3.刪除臨時檔案
方式1: tempFile.deleteOnExit();
//備註:此種刪除方式只有在jvm正常退出時才會刪除臨時檔案,將測試,在javaWeb專案中,一般情況下jvm都無法正常退出,導致臨時檔案一直存在,時間長後臨時檔案不斷積累,最後就會佔滿磁碟空間(不推薦使用)
方式2:tempFile.delete();
//備註:此種方式無論檔案是否存在,是否在使用,都會刪除臨時檔案,建議在臨時檔案上傳完畢後呼叫,建議在finally程式碼塊中呼叫刪除臨時檔案方法.(推薦使用)
方式2.利用FileItem獲取輸入流上傳圖片
1.判斷MultipartFile的型別
multipartFile instanceof CommonsMultipartFile
2.強制型別轉換,然後獲取FileItem
FileItem item = ((CommonsMultipartFile)uploadImg).getFileItem();
3.從FileItem中獲取輸入流內容
//處理上傳檔案
String fileName = item.getName();
//獲取上傳檔名稱
fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);
if (StringUtils.isBlank(fileName) || !fileName.contains(".")) {
log.error("uploadImg fileName 為空或者不會包含[.],fileName:{}", fileName);
} else {
boolean suffixCheck = false;
String suffixName = fileName.substring(fileName.indexOf(".") + 1, fileName.length()).toLowerCase();
//校驗上傳副檔名
if(StringUtils.isNotBlank(suffixName)) {
suffixCheck = imgSuffixList.contains(suffixName);
}
if (suffixCheck) {
//副檔名校驗通過後,上傳到jfs雲端儲存
InputStream in = item.getInputStream();
}
}