http下载文件名

Shi*_*hiv 48 http

我是否知道如何为a-href文件下载分配文件名.

<a href="http://localhost:8080/couch/getFile?dbName=xxx&file=test.xml">get-file</a>
Run Code Online (Sandbox Code Playgroud)

右键单击并另存为:后台运行的服务将返回test.xml内容,用户可以在本地保存.但每次用户都需要输入文件名进行保存.相反,我正在考虑拉取test.xml.我可以知道如何告诉浏览器使用"test.xml"作为下载文件名吗?

HTTP响应上的设置标头是否有效?如果是这样,我可以知道我们怎么做到这一点?

提前致谢!希夫

vto*_*ola 85

您需要附加HTTP响应标头"Content-Disposition"

Response.AppendHeader("content-disposition", "attachment; filename=\"" + fileName +"\"");
Run Code Online (Sandbox Code Playgroud)

干杯.

  • 请注意,IE似乎将单引号视为文件名的一部分. (2认同)
  • 单引号对于文件名无效。请参阅[`quoted-string`](http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html) (2认同)
  • 不能使用引用对(转义),因为它会破坏现有软件。相反,请将 " 转义为 `%22` 并将反斜杠保留为 ```\```,因为这是所有现有软件遵循的事实上的标准。例如,如果您上传名为 ```foo"bar\ 的文件```,浏览器发送 `filename="foo%22bar\"`(2019 年在 Mac 上使用 Firefox 和 Chrome 进行测试)。如果您尝试遵循 RFC 并将 `\"` 视为转义序列,则解析会失败。 (2认同)

Mar*_*sch 21

HTTP标头Content-Disposition允许您建议文件名.

Content-Disposition响应头字段[...]可用于附加其他元数据,例如在本地保存响应有效负载时使用的文件名.

如果您查看BNF,您会看到文件名被指定为quoted-string:

quoted-string =(<">*(qdtext | quoted-pair)<">)

这将是一个有效的例子:

Content-Disposition: attachment; filename="fname.ext"
Run Code Online (Sandbox Code Playgroud)

请注意,单引号'无效.如果您需要在文件名中包含引号("),则可以使用\".但是RFC-6266建议避免包含引号:

避免在filename参数的带引号的字符串形式中包含"\"字符,因为某些用户代理未实现转义,并且"\"可以被视为非法路径字符.

  • `quoted-pair` 是 "\" CHAR,而 CHAR 包含 ". 所以 \" 会这样做。RFC 在其 BNF 中也指出:反斜杠字符(“\”)可以仅在引用字符串中用作单字符引用机制 (2认同)

jcu*_*bic 8

在现代浏览器中,您还可以在链接标签上使用下载属性:

<a href="http://localhost:8080/couch/getFile?dbName=xxx&file=test.xml" download="test.xml">
    get-file
</a>
Run Code Online (Sandbox Code Playgroud)

您可以在Can I use上查看它的支持情况