c#-写入响应时文件损坏
我正在尝试使用ASP.Net将文件写入输出响应流。当我下载该文件时,在打开.zip文件时发现c#-写入响应时文件损坏,c#,asp.net,.net,iis,C#,Asp.net,.net,Iis,我正在尝试使用ASP.Net将文件写入输出响应流。当我下载该文件时,在打开.zip文件时发现错误。您可以从此存档中提取文件,但其他程序可能无法打开它。是否要尝试解决问题?错误。但是,我可以取消此操作并正确打开zip文件 我可能做错了什么 ASP.Net\C#代码: var pathToFile = "c:\abc.zip"; string fileName = Path.GetFileName(pathToFile); byte[] buffer; using (var fi
错误。您可以从此存档中提取文件,但其他程序可能无法打开它。是否要尝试解决问题?
错误。但是,我可以取消此操作并正确打开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);
如果要使用
缓冲区
并将文件写入用户,请不要使用Response.WriteFile
更改为Response.OutputStream.Write
,然后修改代码,如下所示:
var pathToFile=“c:\abc.zip”;
字符串文件名=Path.GetFileName(pathToFile);
字节[]缓冲区=新字节[0];
使用(var fileStream=newfilestream(pathToFile,FileMode.Open,FileAccess.Read))
{
buffer=新字节[fileStream.Length];
读取(buffer,0,buffer.Length);
}
Response.Clear();
AppendHeader(“内容处置”,string.Format(@“附件;文件名={0}”,文件名));
Response.ContentType=“应用程序/zip”;
Response.OutputStream.Write(buffer,0,buffer.Length);
Response.Flush();
Response.End();
如果您想使用缓冲区
并将文件写入用户,请不要使用Response.WriteFile
更改为Response.OutputStream.Write
,然后修改代码,如下所示:
var pathToFile=“c:\abc.zip”;
字符串文件名=Path.GetFileName(pathToFile);
字节[]缓冲区=新字节[0];
使用(var fileStream=newfilestream(pathToFile,FileMode.Open,FileAccess.Read))
{
buffer=新字节[fileStream.Length];
读取(buffer,0,buffer.Length);
}
Response.Clear();
AppendHeader(“内容处置”,string.Format(@“附件;文件名={0}”,文件名));
Response.ContentType=“应用程序/zip”;
Response.OutputStream.Write(buffer,0,buffer.Length);
Response.Flush();
Response.End();
您可能没有读取完整文件。此外,也不需要将其存储在缓冲区中-您可以直接写入响应。我以前直接写入响应,而没有在响应头中附加内容长度,但得到了相同的错误。如何确保“我读取了完整文件”?您可能没有读取完整文件。此外,也不需要将其存储在缓冲区中-您可以直接写入响应。我以前直接写入响应,而没有在响应头中附加内容长度,但得到了相同的错误。如何确保“我已阅读完整文件”?