c# - 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);
解决方案
如果要使用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();
推荐阅读
- excel - 在两列中搜索值并将其与第三列匹配
- jsp - 反射型 XSS:request.getParameter
- python - Keras 自定义损失函数 - 生存分析截尾
- concurrency - 在 Tcl 中防止 proc reenry 的最佳方法是什么?
- typescript - 打字稿函数重载奇怪的行为
- laravel - Pusher vs Websocket vs Echo
- java - Clickhouse批处理执行不插入新行
- reactjs - 从样式化组件转换为 Material-UI:Material 可以在 div 上使用 `withStyles()` 吗?
- apache-kafka - Kafka Streams 状态存储可以完全是瞬态的吗
- sql - SQL 查找第一个事件,然后查找它之后的结束事件