簡體   English   中英

Java:如何在上傳和下載文件時容納文件名中的特殊字符?

[英]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配合得很好,甚至可以理解為什么這里會產生影響。

如果我正確理解你,你想對文件名進行編碼,這樣當你上傳它,然后下載它時,你希望能夠從文件名中找到相同的文件。

為此,您可以使用URLEncoderURLDecoder類。

您可以執行以下操作:

String fileName;
fileName = URLEncoder.encode("My ! String #", "UTF-8");

這將編碼它。 要獲取原始文件名:

String originalFileName = URLDecoder.decode(fileName, "UTF-8");

您可以使用編碼的文件名從服務下載文件。 然后,您可以解碼文件名以適當地存儲它。

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM