繁体   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