1. 程式人生 > >上傳檔案注意事項

上傳檔案注意事項

上傳檔案注意事項

客戶端

使用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();
                         }

}

4.將in輸出到要儲存的檔案中