【问题标题】:Downloading file using Asp.Net IHttpHandler gives different file property results使用 Asp.Net IHttpHandler 下载文件会给出不同的文件属性结果
【发布时间】:2015-03-08 04:58:28
【问题描述】:

我编写了一个 IHttpHandler 来提取查询字符串参数,并使用它们来确定要发回的文件类型。在我调用的处理程序中:

private static void GetSegmentFile(HttpContext context)
{
    byte[] file = GetFile();
    context.Response.ContentyType = "application/octet-stream";
    context.Response.BinaryWrite(file);
}

在浏览器端,我在尝试下载文件时会得到不同的结果(使用右键单击 > 保存在网页中的链接上,并将其 href 设置为文件的 URL)。使用 test.docx 这些是我的结果:

Chrome:文件具有原始文件名和文件扩展名 IE 11:文件重命名为 media,文件扩展名为 .zip

我附上了一张图片来说明我的意思。

【问题讨论】:

  • 我相信你的两个文件是不同的(浏览器和代码)。确保两条路径相同
  • 您不能将资源管理器窗口缩小一点以用于您的屏幕截图吗? :P
  • 右键点击什么?你怎么下载?顺便提一句。你不是缺少 Content-Disposition 标头吗?
  • @WiktorZychla 通过右键单击将其 href 设置为文件 URL 的 <a> 元素
  • 那你肯定缺Content-Disposition : attachment; filename=foo.docx

标签: c# asp.net


【解决方案1】:

您需要发送一个Content-Disposition HTTP 标头。您可以通过这种方式发送文件名。 IE 试图解释您发送的字节,发现它是一个 zip 文件。 Office 文档是具有不同扩展名的 zip 文件。

Chrome 显然使用 URL 来启发式地构造名称。

如果没有明确的名称,浏览器应该做什么?它只能猜测。

研究使用该 HTTP 标头发送文件名并指定名称的正确方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-22
    • 2016-03-01
    相关资源
    最近更新 更多