- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
背景:
我有一个我上传的文件,在此过程中,文件的链接存储在数据库中而不是实际文件中,实际文件存储在文件系统中,目前存储在我的本地机器中。
目标:
我的目标是上传文件并正确下载文件,其中包含特殊字符 - #、$、%、@ 等
。
问题:
我可以上传带有特殊字符的文件,但无法下载带有特殊字符的文件。此外,我无法对 Download Servlet
进行任何更改,因为它是 Framework
的一部分,所以我只能使用 Upload Servlet
,所以我的重点是以这种方式上传带有特殊字符的文件,以便我可以下载它们。
我已经尝试为文件名创建一个别名,其中我用 '_'
符号替换特殊字符,这种方法工作正常并且能够下载文件但文件的实际名称不是在这里维护,文件名中的所有特殊字符都替换为 '_'
符号,这是 Not Acceptable ,因为用户应该使用文件的实际名称。
任何建议或方法:
代码:
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;
}
希望我在这里有所作为。
谢谢。
最佳答案
如果我没理解错的话,您希望对文件名进行编码,以便在上传和稍后下载时,您希望能够从文件名中找到相同的文件。
为此,您可以使用 URLEncoder和 URLDecoder类。
您可以执行以下操作:
String fileName;
fileName = URLEncoder.encode("My ! String #", "UTF-8");
这将对其进行编码。获取原始文件名:
String originalFileName = URLDecoder.decode(fileName, "UTF-8");
您可以使用编码后的文件名从服务中下载文件。然后您可以解码文件名以适本地存储它。
希望对您有所帮助。
关于Java : How to accommodate special characters in the filename while uploading and downloading the file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3283675/
我有一个极其嵌套的、分层的列表(它包含关于物种排序的生物学数据)。请参阅示例,其中我只选择了可能的 10 层嵌套中的三层。 我想水平显示此列表,作为已旋转 90 度的组织结构图。 当我为每个子 ul
背景: 我有一个我上传的文件,在此过程中,文件的链接存储在数据库中而不是实际文件中,实际文件存储在文件系统中,目前存储在我的本地机器中。 目标: 我的目标是上传文件并正确下载文件,其中包含特殊字符 -
代码: cidrsubnet("10.1.2.0/21", 3, 8) 问题: 当我在 terraform 中运行此命令时,我得到的前缀扩展名不是 3容纳一个编号为8的子网。这是为什么呢?任何低于 8
代码: cidrsubnet("10.1.2.0/21", 3, 8) 问题: 当我在 terraform 中运行此命令时,我得到的前缀扩展名不是 3容纳一个编号为8的子网。这是为什么呢?任何低于 8
我在 Seaborn 中有一个包含 10 个图的 FacetGrid 图表,其中的图略有重叠。我想改变整体图形的大小。当我在下面的代码中使用 g.fig.subplots(figsize=(12,12
我是一名优秀的程序员,十分优秀!