57

我可以知道如何为 a-href 文件下载分配文件名。

<a href="http://localhost:8080/couch/getFile?dbName=xxx&file=test.xml">get-file</a>

右键另存为:后台运行的服务将返回 test.xml 内容,用户可以将其保存在本地。但是这里每次用户都需要输入一个文件名来保存。相反,我想拉 test.xml。我可以知道如何告诉浏览器使用“test.xml”作为下载文件名吗?

在 HTTP 响应上设置标头会起作用吗?如果是这样,我可以知道我们该怎么做吗?

4

3 回答 3

100

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

Response.AppendHeader("content-disposition", "attachment; filename=\"" + fileName +"\"");
于 2012-11-09T12:28:37.900 回答
33

HTTP 标头Content-Disposition允许您建议一个文件名。

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

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

引用字符串 = ( <"> *(qdtext | 引用对) <"> )

这将是一个有效的例子:

Content-Disposition: attachment; filename="fname.ext"

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

避免在文件名参数的引号字符串形式中包含“”字符,因为某些用户代理不实现转义,并且“”可以被视为非法路径字符。

于 2015-08-12T22:20:53.797 回答
9

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

<a href="http://localhost:8080/couch/getFile?dbName=xxx&file=test.xml" download="test.xml">
    get-file
</a>

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

于 2018-07-30T07:08:21.773 回答