首页 > 解决方案 > c#- 写入响应时文件损坏

问题描述

我正在尝试使用 ASP.Net 将文件写入输出响应流。当我下载文件时,我得到一个Errors were found opening .zip file. You can extract files from this archive, but other programs may not be able to open it. Do you want to try fixing the problems?错误。但是,我可以取消此操作并正确打开 zip 文件。

我可能做错了什么?

ASP.Net\C# 代码:

var pathToFile = "c:\abc.zip";
string fileName = Path.GetFileName(pathToFile);
byte[] buffer;
using (var fileStream = new FileStream(pathToFile, Filemode.open))
{
  buffer = new byte[fileStream. Length];
  fileStream.Read(buffer, 0, (int)fileStream.Length);
}
Response.Clear();
Response.Buffer = true;
Response.AppendHeader("content-disposition", string.Format(@"attachment; filename={0}.zip", filename));
Response.ContentType = "application/zip";
Response.AppendHeader("content-length", buffer.Length.ToString());
Response.WriteFile(pathToFile);

标签: c#asp.net.netiis

解决方案


如果要使用buffer并将文件写入用户,请不要使用Response.WriteFile.

更改为Response.OutputStream.Write并修改您的代码,如下所示:

var pathToFile = "c:\abc.zip";
string fileName = Path.GetFileName(pathToFile);
byte[] buffer = new byte[0];
using (var fileStream = new FileStream(pathToFile, FileMode.Open, FileAccess.Read))
{
  buffer = new byte[fileStream.Length];
  fileStream.Read(buffer, 0, buffer.Length);
}
Response.Clear();
Response.AppendHeader("content-disposition", string.Format(@"attachment; filename={0}", filename));
Response.ContentType = "application/zip";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
Response.End();

推荐阅读