0

我正在处理一些要求,这些要求将导致从 J2EE Web 服务器下载任意 PDF 文件。名称可能如下所示:

Xxxxxxxxxxxxxxxxxx - Yyyyyyyyyy - Aaaaaaaaaaa - Bbbbbbbbb ccc Dddddddddddddd - 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);
4

2 回答 2

2

我过去有类似的问题,并找到了以下解决方案。

第一个 URL 类似于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

映射到的 sevlet/download/将从 URL 获取 ID 并将文件打印到其输出流。但是浏览器会从 URL 中提取文件名并提供下载和保存文件,因为它的名称在 URL 中。我希望这也适用于长文件名。

于 2011-08-31T12:43:43.493 回答
1

RFC 2183 不相关,RFC 6266 是。

此外,78 个字符的限制仅适用于电子邮件,不适用于 http,因此您不必担心。

于 2011-08-31T14:39:24.597 回答