Firefox和Content-Disposition标头

时间:2012-02-06 00:30:09

标签: 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返回了一个奇怪的文件,该文件具有正确的扩展名和正确的名称,没有引号但是无法执行。这是正确的文件大小,适当的扩展名和正确的名称,但它无法执行。它还返回文件名前后的空格。

2 个答案:

答案 0 :(得分:4)

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

以及Mozilla页面(我猜你引用了这个):

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

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

希望这有帮助。

答案 1 :(得分:4)

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

  1. RFC2184
  2. 编码您的文件名
  3. 如果您的文件名中没有特殊字符,请在内容处理字符串中引用它。
  4. 由于你已经尝试过2,你可以尝试使用1并看看它是如何运作的。

    通常我会使用ContentDisposition类为我生成标题:

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

    希望这有帮助。