1. 程式人生 > >MultipartFile.getOriginalFilename方法在IE瀏覽器下返回結果帶盤符導致的“文件名、目錄名或卷標語法不正確”錯誤

MultipartFile.getOriginalFilename方法在IE瀏覽器下返回結果帶盤符導致的“文件名、目錄名或卷標語法不正確”錯誤

index 處理 直接 ssi 是否 上傳文件 含義 目錄 瀏覽器

在IE環境下的MultipartFile的getOriginalFilename實際上與Chrome瀏覽器的返回結果不同
在Chrome瀏覽器下,此方法是直接返回“XXXXXXX.jpg”結果的。
而在IE瀏覽器環境下,此方法是返回帶盤符信息的“D:/XXXXXXX.jpg”
因此在寫入文件過程中,IE環境下會導致上傳文件報錯的,“文件名、目錄名或卷標語法不正確”。
在網上搜索了一下,發現方法的定義如下:

技術分享圖片

最上面兩句含義便是,該方法返回文件在客戶端文件系統中的原始文件名稱,該名稱或許會包含路徑信息,這點依賴於瀏覽器。

由於之前的測試都是在Chrome瀏覽器,未測試IE11瀏覽器,故未發現該問題。

解決方法如下:
在獲取文件名後,判斷是否在IE環境下運行的此方法,並做相應的字符串截取的處理,即可返回正確的結果。
// 獲取文件名
String fileName = file.getOriginalFilename();
//判斷是否為IE瀏覽器的文件名,IE瀏覽器下文件名會帶有盤符信息
// Check for Unix-style path
int unixSep = fileName.lastIndexOf(‘/‘);
// Check for Windows-style path
int winSep = fileName.lastIndexOf(‘\\‘);
// Cut off at latest possible point
int pos = (winSep > unixSep ? winSep : unixSep);
if (pos != -1) {
// Any sort of path separator found...
fileName = fileName.substring(pos + 1);
}

經測試,發現問題解決,此時既可以兼容IE和Chrome瀏覽器上傳無問題。

MultipartFile.getOriginalFilename方法在IE瀏覽器下返回結果帶盤符導致的“文件名、目錄名或卷標語法不正確”錯誤