Firefox和Content-Disposition标头

Gar*_*t R 9 firefox header content-disposition

我的附件名称有问题.当我在谷歌浏览器上调用该网站时,它会返回具有正确名称和扩展名的文件.我用Internet Explorer测试它也很好用.问题在于只有Firefox.我调用该网站,它返回文件标题上的第一个单词,没有扩展名.

例如,如果我想要一个名为"My report.docx"的文件,它会变成一个名为"My"的文件.我用谷歌搜索,结果发现这是人们的常见问题,因为浏览器以不同的方式读取标题.他们说修复是引用文件名:

Content-Disposition: attachment; filename=My Report.docx

现在是:(注意引号)

Content-Disposition: attachment; filename="My Report.docx"

但是,这对我不起作用.

在Chrome上,它返回"My Report.docx"(实际上带有引号).Firefox返回了一个奇怪的文件,该文件具有正确的扩展名和正确的名称,没有引号但是无法执行.这是正确的文件大小,适当的扩展名和正确的名称,但它无法执行.它还返回文件名前后的空格.

Asa*_*din 5

我知道这是一个非常古老的问题,但我最近遇到了同样的问题。解决方案是要么

  1. 根据RFC2184编码您的文件名,或者,
  2. 如果文件名中没有特殊字符,请在内容处置字符串中引用它。

由于您已经尝试过 2,您可以尝试使用 1 并查看效果如何。

通常我使用这个ContentDisposition类来为我生成我的标题:

Dim contentDispositionHeader = New Net.Mime.ContentDisposition() With {.FileName = filename}
Response.AddHeader("Content-Disposition", contentDispositionHeader.ToString())
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


icy*_*com 4

这应该按预期工作,这是另一个具有相同问题的 SOq:

还有 Mozilla 页面(我猜你正在引用这个):

我不知道您的服务器端代码的具体情况,但这里有一些需要确认/尝试的事情:

  • 如果您的服务器上有可用的 PHP,您可以尝试上面第一个链接中的代码吗?如果没有,您可能可以在网上找到您选择的语言的内容。这样,您可以确认问题是否出在您的代码中或其他地方(服务器设置、浏览器等)
  • 这种情况是发生在其他客户端计算机上(即您尝试下载的地方)还是仅发生在该客户端计算机上?您可能想尝试其他人来确认。
  • 这在 IE / Safari 或其他浏览器中工作正常吗?您甚至可以尝试使用命令行或类似的方式来执行此wget操作。curl
  • 您是否也Content-Type正确提供了标头?
  • 您可以尝试下载其他文件或不同类型的文件,例如 a.png或 a吗.xls?事实上,最简单的方法可能是尝试使用纯文本文件 ( text/plain),然后从那里获取它。

希望这可以帮助。