我正在处理一些要求,这些要求将导致从 J2EE Web 服务器下载任意 PDF 文件。名称可能如下所示:
Xxxxxxxxxxxxxxxxxx - Yyyyyyyyyy - Aaaaaaaaaaa - Bbbbbbbb ccc Dddddddddddddd - abc1234560 - 2009-03-26 – 235959.pdf
现在我已经阅读了 RFC2183 中的几个部分:
http://www.ietf.org/rfc/rfc2183.txt
例如
A short (length <= 78 characters) parameter value containing only non-
tspecials' characters SHOULD be represented as a single
token'. A short parameter value containing only ASCII characters, but includingtspecials' characters, SHOULD be represented as
quoted-string'. Parameter values longer than 78 characters, or which contain non-ASCII characters, MUST be encoded as specified in [RFC 2184].
等等等等。如果我不通读所有这些 RFC,那么现在有数百万件事可能会出错……或者我选择一个处理此类 RFC 规范的库。 Java有这样的东西吗?或者我是偏执狂,实际上只需将此 header 写入输出流就足够了:
String filename = "\"" + filename.replace("\"", "\\\"") + "\"";
addHeader("Content-Disposition", "attachment; filename=" + filename);
最佳答案
我过去也遇到过类似的问题,并找到了以下解决方案。
第一个 URL 类似于 http://myhost.com/file/1234
其中 1234 是文件 ID。假设文件名应为 my-very-long-file-name.pdf
。因此,不要设置 HTTP header ,而是将调用重定向到 URL,如
http://myhost.com/download/1234/my-very-long-file-name.pdf
映射到 /download/
的 sevlet 将从 URL 获取 ID 并将文件打印到其输出流。但浏览器会从 URL 中提取文件名,并提供下载和保存文件的机会,因为文件名已包含在 URL 中。我希望这对您也适用于长文件名。
关于java - 如何在 Java 中正确设置大文件名的 HTTP Content-Disposition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7256954/