我正在制定一些要求,这些要求会导致从J2EE Web服务器下载任意PDF文件。名称可能如下所示:
Xxxxxxxxxxxxxxxxxx - Yyyyyyyyyy - Aaaaaaaaaa - Bbbbbbbb ccc Ddddddddddddddddd - abc1234560 - 2009-03-26 - 235959.pdf
现在我已经阅读了RFC2183中的几个部分:
http://www.ietf.org/rfc/rfc2183.txt
例如
包含的短(长度<= 78个字符)参数值 只有非
tspecials' characters SHOULD be represented as a single
令牌'。仅包含ASCII字符的短参数值, 但包括tspecials' characters, SHOULD be represented as
quoted-string'。参数值超过78个字符,或 其中包含非ASCII字符,必须按照中的规定进行编码 [RFC 2184]。
等等。现在有数以百万计可能出错的东西,如果我不通读所有这些RFC ...或者我选择了一个处理这种RFC规范的库。 Java有没有这样的东西?或者我是偏执狂,实际上只需将此标题写入输出流:
String filename = "\"" + filename.replace("\"", "\\\"") + "\"";
addHeader("Content-Disposition", "attachment; filename=" + filename);
答案 0 :(得分:2)
我过去遇到过类似的问题,并找到了以下解决方案。
第一个网址看起来像http://myhost.com/file/1234
其中1234是文件ID。假设文件名应为my-very-long-file-name.pdf
。因此,而不是设置HTTP标头重定向调用URL,如
http://myhost.com/download/1234/my-very-long-file-name.pdf
映射到/download/
的sevlet将从URL获取ID并将文件打印到其输出流。但浏览器将从URL中提取文件名,并提供您下载和保存文件,因为其名称是在URL中。我希望这也适用于长文件名。
答案 1 :(得分:1)
RFC 2183无关,RFC 6266是。
此外,78个字符的限制仅适用于电子邮件,而不是http,所以您不必担心。