如何在Content-Disposition标头中设置包含空格的文件名

Huy*_*han 43 java filenames servlets download

我有这段代码:

resp.addHeader("Content-Disposition", "inline; filename=" + fileName);
Run Code Online (Sandbox Code Playgroud)

当文件名是"a_b_c.doc"或"abc.doc"时,正确显示下载文件的名称.但是,当文件名是"abc .doc"时,下载文件的名称只是"a".

我们怎么解决这个问题?

Mor*_*sen 67

使用引号:

resp.addHeader("Content-Disposition", "inline; filename=\"" + fileName + "\"");
Run Code Online (Sandbox Code Playgroud)

  • 根据HTTP 1.1规范,这是正确的方法(文件名值为引用字符串):https://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1 (3认同)

Mal*_*ous 12

根据HTTP标准,您使用双引号括起字符串,并通过在其前面使用单个反斜杠转义任何引号或反斜杠.

Content-Disposition: attachment; filename="Very \"interesting\" file \\ files.txt"
Run Code Online (Sandbox Code Playgroud)

这将提示保存为Very "interesting" file \ files.txt.请注意,反斜杠的存在并不表示文件夹,它表明反斜杠是文件名的一部分(在Linux和其他一些平台上完全有效,但在Windows上则不行.)