這幾天在利用之前寫得上傳套件上傳圖片時遇到了問題(感謝專案組員抓到這個bug)
那就是上傳的圖片若以中文、日文等非英文、數字的名稱上傳遇到麻煩
在WebApplication會顯示找不到檔案的錯誤訊息
我先試著將上傳圖片名稱改成URL上的UTF-8編碼
String fileName = java.net.URLEncoder.encode( file.getName(), "UTF-8");
file.renameTo (new File(file.getParent(), fileName));
雖然檔名的確與URL上經過編碼的檔案名稱相符,不過還是一樣找不到檔案... = =
既然上傳有問題,那剩下的方法就是禁止上傳檔名有編碼問題的檔案囉
最後做法是用正規表示法協助,讀取上傳檔案的檔名加以判斷
有問題的檔案就直接刪除了,並回覆訊息請求上傳有正確檔名的檔案
// 判斷是否含有非英數編碼的字元
String stringEncodeJudge = "^.*[^0-9a-zA-Z~!@#\\$%\\^&\\*\\(\\)_\\+\\{\\}\\|:\\\"<>\\?\\[\\];',\\.\\/].*$";
if(!filePart.getFileName().matches(stringEncodeJudge)){
session.setAttribute(name, saveDirectory + "/" + filePart.getFileName());
tempMessage = fileName + "上傳成功!!<br />";
Message += tempMessage;
}else{
tempMessage = fileName + "請改成英文、數字組成的檔名!!<br />";
Message += (tempMessage);
File disposedFile = new File(saveDirectory + "/" + filePart.getFileName());
disposedFile.delete();
}
沒有留言:
張貼留言