asp.net - 为什么从 ASP.NET 页面下载 .docx 文件会损坏?

标签 asp.net httpresponse docx

我有以下代码用于将页面附件带给用户:

private void GetFile(string package, string filename)
{
    var stream = new MemoryStream();

    try
    {
        using (ZipFile zip = ZipFile.Read(package))
        {
            zip[filename].Extract(stream);
        }
    }
    catch (System.Exception ex)
    {
        throw new Exception("Resources_FileNotFound", ex);
    }

    Response.ClearContent();
    Response.ClearHeaders();
    Response.ContentType = "application/unknown";

    if (filename.EndsWith(".docx"))
    {
        Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
    }

    Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
    Response.BinaryWrite(stream.GetBuffer());
    stream.Dispose();
    Response.Flush();
    HttpContext.Current.ApplicationInstance.CompleteRequest();
}

问题是所有支持的文件都可以正常工作(jpg、gif、png、pdf、doc 等),但 .docx 文件在下载时已损坏,需要由 Office 修复才能打开。

一开始我不知道问题是不是在解压包含.docx的zip文件,所以我没有把输出文件只放在响应中,而是先保存了,文件打开成功,所以我知道问题所在应该在回复写作中。

你知道会发生什么吗?

最佳答案

我也遇到了这个问题,实际上在这里找到了答案:http://www.aspmessageboard.com/showthread.php?t=230778

事实证明,docx 格式需要在 Response.BinaryWrite 之后立即有 Response.End()。

关于asp.net - 为什么从 ASP.NET 页面下载 .docx 文件会损坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477564/

相关文章:

asp.net - 如何在以Googlebot身份获取上测试我的本地页面

ASP.NET URL 重写在开发服务器中有效,但在本地 IIS 中无效

playframework - 从 Play 2.1 提供视频文件

http - 如何使用从批处理脚本调用的 curl 获取 http post 请求的响应代码?

c# - 我们如何使用 C# 读取 .docx 文件?

RUBY 纯文本到具有特定格式的 Docx

asp.net - 是否可以在 Linux 上托管 ASPX 网站?

asp.net - 在没有 Node 的情况下安装 npm

java - 如何打印从 HttpResponse 返回的消息?

c# - 以编程方式将 Doc 转换为 Docx bug