我有这段代码:
resp.addHeader("Content-Disposition", "inline; filename=" + fileName);
当文件名为“a_b_c.doc”或“abc.doc”时,下载文件的名称会正确显示。但是,当文件名为“abc .doc”时,下载文件的名称仅为“a”。
我们如何解决这个问题?
使用引号:
resp.addHeader("Content-Disposition", "inline; filename=\"" + fileName + "\"");
根据HTTP 标准,您可以用双引号将字符串括起来,并通过在它们前面加上一个反斜杠来转义其中的任何引号或反斜杠。
Content-Disposition: attachment; filename="Very \"interesting\" file \\ files.txt"
这将提示另存为Very "interesting" file \ files.txt
. 请注意,反斜杠的存在并不表示文件夹,它表明反斜杠是文件名的一部分(这在 Linux 和其他一些平台上完全有效,但在 Windows 上无效。)
需要以下步骤:
+
编码空间而不是%20
,因此我们需要手动将它们替换为%20
)。代码:
String fileName = ...;
String encodedFileName = URLEncoder.encode(fileName,
StandardCharsets.UTF_8.name()).replace("+", "%20");
response.setHeader("Content-Disposition",
String.format("inline; filename*=UTF-8''%1$s; filename=%1$s", encodedFileName));
示例标题:
inline; filename*=UTF-8''Hello%20World.doc; filename=Hello%20World.doc
已成功测试
如果你引用你的文件名,chr(34)
它将起作用:
resp.addHeader("Content-Disposition", "inline; filename=" + chr(34) + fileName + chr(34));