java - 如何在 Java 中正确设置大文件名的 HTTP Content-Disposition?

标签 java http content-disposition

我正在处理一些要求,这些要求将导致从 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 including tspecials' 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/

相关文章:

http - flask 发送文件 : how do I know if I need "as_attachment"?

javascript - 从 ajax 中的服务器响应获取 excel 文件(.xlsx)

java - 在发布新帖子之前向用户提供类似帖子的功能的逻辑是什么?

node.js - 在 Node 中仅获取 GET 请求的 header

http - 如何在 Apache Tomcat 的 HTTP 响应 header 中获取服务器信息

apache - 如何将 Apache HTTP 代码 404 替换为 200

javascript - 从 Rest API 响应内容配置输出 [Object, Object] 下载 javascript 中的 excel 文件

java - 正则表达式在除括号外的管道之间分割

java - 如何在测试结果列范围 HTML 报告中将 TestNg "dependsOnMethods"显示为单独的节点

java - 国际化 Java 应用程序?