ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java:如何在上传和下载文件时容纳文件名中的特殊字符?

2019-06-21 22:06:59  阅读:396  来源: 互联网

标签:java spring-mvc spring servlets special-characters


背景:

我有一个我上传的文件,在此过程中文件的链接存储在数据库而不是实际文件中,acutal文件存储在文件系统中,当前存储在本地机器中.

目标:

我的目标是上传文件并正确下载文件,其中包含特殊字符 – #,$,%,@等.

问题:

我能够上传具有特殊字符的文件,但无法下载带有特殊字符的文件.另外我不能对Download Servlet进行任何更改,因为它是Framework的一部分,所以我可以使用的是上传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;
}

希望我在这里有所作为.

谢谢.

解决方法:

如果我正确理解你,你想对文件名进行编码,这样当你上传它,然后下载它时,你希望能够从文件名中找到相同的文件.

为此,您可以使用URLEncoderURLDecoder类.

您可以执行以下操作:

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

这将编码它.要获取原始文件名:

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

您可以使用编码的文件名从服务下载文件.然后,您可以解码文件名以适当地存储它.

希望有所帮助.

标签:java,spring-mvc,spring,servlets,special-characters
来源: https://codeday.me/bug/20190621/1257916.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有