[英]Java : How to accommodate special characters in the filename while uploading and downloading the file?
背景:
我有一個我上傳的文件,在此過程中文件的鏈接存儲在數據庫而不是實際文件中,acutal文件存儲在文件系統中,當前存儲在本地機器中。
目標:
我的目標是上傳文件並正確下載文件,其中包含特殊字符 - #,$,%,@ etc
。
問題:
我能夠上傳具有特殊字符的文件,但無法下載帶有特殊字符的文件。 另外我不能對Download Servlet
進行任何更改,因為它是Framework
一部分,所以我可以使用的是Upload Servlet
,所以我的重點是上傳帶有特殊字符的文件,以便我可以下載它們。
我已經嘗試為文件名創建一個別名,在其中用'_'
符號替換特殊字符,這種方法工作正常,並且能夠下載文件,但文件的實際名稱不在這里維護,文件名中的所有特殊字符被'_'
符號替換,這是不可接受的,因為用戶應該是文件的實際名稱。
任何建議或方法:
碼:
public ModelAndView save(HttpServletRequest request, HttpServletResponse response, Object command,
ModelAndView modelView, BindException errors) throws Exception {
String newFileName = checkForSpecialCharsAndGetNewFileName(file.getOriginalFilename());
System.out.println("alias filename="+ newFileName);
String url = "f" + (String.valueOf(System.currentTimeMillis())) + "_" + newFileName;
String fileName = file.getOriginalFilename();
System.out.println("FileName "+ fileName);
}
//Code to replace all special characters in the incoming file with '_' symbol.
private String checkForSpecialCharsAndGetNewFileName (String originalFileName) {
final String[] splChars = {"#", "+", "$"};
String newString = originalFileName;
for (int i=0; i<splChars.length; i++)
newString = StringUtils.replace(newString, splChars[i], "_");
return newString;
}
希望我在這里有所作為。
謝謝。
我有一個問題, java.io.File
類已經開始自動編碼包含在構造函數中傳遞的文件名中的波浪號。
因此,例如,如果使用"~filename"
實例化文件,它將在內部將其解釋為"%7Efilename"
這樣如果您需要讀取或寫入名為"~filename"
,則無法執行此操作。
當我在tomcat服務器上支持一組更新的Xalan / Xerces jar(全套5)時,引入了這個問題。 如果你刪除認可的罐子,問題會立即消失(如圖所示)。
如果這與您的問題類似,您可能需要查看您的服務器是否使用任何支持的XML解析jar並考慮刪除它們。 我還沒有找到一種方法可以讓新的xerces jars與java.io.File配合得很好,甚至可以理解為什么這里會產生影響。
如果我正確理解你,你想對文件名進行編碼,這樣當你上傳它,然后下載它時,你希望能夠從文件名中找到相同的文件。
為此,您可以使用URLEncoder和URLDecoder類。
您可以執行以下操作:
String fileName;
fileName = URLEncoder.encode("My ! String #", "UTF-8");
這將編碼它。 要獲取原始文件名:
String originalFileName = URLDecoder.decode(fileName, "UTF-8");
您可以使用編碼的文件名從服務下載文件。 然后,您可以解碼文件名以適當地存儲它。
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.