从MemoryStream发送zip文件时,HTTP响应无效
本文关键字:HTTP 响应 无效 文件 MemoryStream 发送 zip | 更新日期: 2023-09-27 18:26:37
我试图在内存中创建一个zip文件,从文件流中读取多个其他zip文件。它似乎能够正确读取文件,并创建一个zip文件;然而,当创建响应时,所有内容头都被放入invalidHeaders
中。这导致下载永远不会发生,而是加载了一个错误的响应页面。
using (var memoryStream = new MemoryStream())
{
// Gather all zips into a single zip file
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach(var zipFile in zipFiles)
{
archive.CreateEntryFromFile(zipFile.ZipFilePath, Path.GetFileName(zipFile.ZipFilePath));
}
}
// Now we have our memory stream with our zip
HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.OK);
message.Content = new StreamContent(memoryStream);
message.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
message.Content.Headers.ContentDisposition.FileName = "AllZIPFiles.zip";
message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
message.Content.Headers.ContentLength = memoryStream.Length;
// Content headers placed into invalidHeaders?
return ResponseMessage(message);
}
ZipArchive
完成其工作后,流的位置将位于流的末尾。
在发送这样的流作为响应之前,请确保将流位置设置为0,如下所示:
memoryStream.Position = 0;