【问题标题】:What content type to force download of text response?什么内容类型可以强制下载文本响应?
【发布时间】:2010-09-16 06:10:30
【问题描述】:

我需要将文件流式传输到响应以保存在最终用户的机器上。该文件是纯文本,那么我可以使用什么内容类型来防止文本显示在浏览器中?

【问题讨论】:

标签: asp.net


【解决方案1】:

我不认为它是这样工作的。

使用 Content-Disposition: attachment 标头,但坚持使用正确的 Content-Type。

【讨论】:

  • 仅当 User-Agent 为 Internet Explorer 6 时发送 Content-Type: application/octet-stream...
【解决方案2】:

在大多数情况下,以下应该有效:

Content-type: application/octet-stream
Content-Disposition: attachment; filename="myfile.txt"

有一些边缘浏览器仍会将其显示为文本文件,但主流浏览器都不会(我指的是嵌入在某些 MID 中的浏览器)。


编辑:最初发布此答案时,发送 Mime-Type application/octet-stream 是在某些浏览器中触发下载的唯一可靠方法。现在在 2016 年,如果您不需要支持古老的浏览器,您可以安全地指定正确的 mime-type。

【讨论】:

  • 你需要对内容类型撒谎吗?如果你可以使用 Content-Disposition 会更好,它/应该/工作。
  • 根据我的经验,application/octet-stream 使其在所有浏览器中都能更可靠地工作。
  • ^ 他说的。如果使用 text/plain,Internet Explorer 6 仍可能将其显示为文本。
  • 这个答案不是特别针对 asp.net,是吗?
  • @Shurane:不,它适用于通过 HTTP 协议发送数据的任何类型的项目/语言。使用可以在 PHP 中使用header() 发送那些。
【解决方案3】:

为了安全起见并确保所有浏览器的行为一致,通常最好同时使用两者:

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"My Text File.txt\"

【讨论】:

  • 您只需要内容配置,这样您就可以保留相关的内容类型,例如 text/plain 等。
  • @MattConnolly 如果您不打算使用Content-Type 标头,您建议在哪里保留相关的内容类型
  • 如果我从服务器端将它作为标头传递,前端如何使用它?我不能使用 。假设我想使用 fetch 调用。
猜你喜欢
  • 2012-08-14
  • 1970-01-01
  • 2013-07-29
  • 2022-10-17
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多