【问题标题】:.docx files being corrupted when downloading from an ASP.NET page从 ASP.NET 页面下载时损坏的 .docx 文件
【发布时间】:2013-12-02 06:02:08
【问题描述】:

问题是所有支持的文件都可以正常工作(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?

它工作正常,但 Response.End 在线程被中止时抛出异常。

【问题讨论】:

  • 我猜你的所有下载都已损坏,除了某些文件格式比其他文件格式更宽容。显示图像的软件可能不会注意到 jpg 或 gif 上的错误字节。但是,docx 文件实际上是 zip 文件,对损坏的字节更加严格。我要做的是:1. 将文件流读入字节数组,2. 关闭/处理您的流,然后通过 BinaryWrite 将字节数组写入响应
  • @Walter Stabosz 我想这可以写成答案而不是评论......

标签: asp.net vb.net


【解决方案1】:

将我的评论复制到答案:

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

我会做的是:

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

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

然后按照https://stackoverflow.com/a/15869303/740639中的代码进行操作

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

【讨论】:

  • 我参考了您的链接。其中的 masterPresentation 是什么。我该如何使用它?
  • masterPresentation 是用户在其代码示例之外定义的局部变量。在这一点上,我已经尽我所能帮助了你。我开始觉得你可能因为已经分配给你的编程任务而不知所措。
猜你喜欢
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
相关资源
最近更新 更多