9

我对附件名称有疑问。当我在 google chrome 上调用该站点时,它会返回具有正确名称和扩展名的文件。我用 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 返回了一个奇怪的文件,该文件具有正确的扩展名和正确的名称,并且没有引号,但无法执行。这是正确的文件大小、正确的扩展名和正确的名称,但无法执行。它还在文件名之前和之后返回一个空格。

4

2 回答 2

5

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

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

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

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

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

希望这可以帮助。

于 2012-11-27T06:39:38.143 回答
4

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

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

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

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

希望这可以帮助。

于 2012-02-06T01:37:17.273 回答