从ASP.NET页面下载时.docx文件已损坏

时间:2013-12-02 06:02:09

标签: asp.net vb.net

问题是所有支持的文件都能正常运行(jpg,gif,png,pdf,doc等),但.docx文件,当我下载时,它说损坏了,它们需要由Office修复才能成为打开。

这是我的代码:

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

我从其他网站获得了解决方案,

事实证明,docx格式需要在Response.BinaryWrite之后立即使用Response.End()而不是HttpContext.Current.ApplicationInstance.CompleteRequest()

Why are .docx files being corrupted when downloading from an ASP.NET page?

它工作正常,但是当Thread被中止时,Response.End抛出异常。

1 个答案:

答案 0 :(得分:3)

将我的评论复制到答案:

我的猜测是你的所有下载都已损坏,除了一些文件格式比其他文件格式更宽容。 jpg或gif上的错误字节可能不会被显示图像的软件注意到。但是,docx文件实际上是zip文件,它们对损坏的字节更严格。

我要做的是:

  1. 将您的文件流读入字节数组
  2. 关闭/处理您的信息流
  3. 然后通过Response

    将字节数组写入BinaryWrite

    //将文件读取为字节数组 byte [] RptBytes = File.ReadAllBytes(pathToFile);

  4. 然后按照https://stackoverflow.com/a/15869303/740639

    中的代码操作

    我认为您的问题是如何处理Response。您可能只需按照该答案中的代码跳过整个字节数组部分。