从ASP.NET页面下载时为什么.docx文件被破坏?

Vic*_*ues 25 asp.net docx httpresponse

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

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();
}
Run Code Online (Sandbox Code Playgroud)

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

起初我不知道问题是解压缩包含.docx的zip文件,所以不是仅将输出文件放在响应中,而是先保存它,然后文件成功打开,所以我知道问题应该回应写作.

你知道会发生什么吗?

小智 31

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

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

  • 上面的链接已被破坏. (3认同)