从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);
}

从MemoryStream发送zip文件时,HTTP响应无效

ZipArchive完成其工作后,流的位置将位于流的末尾。

在发送这样的流作为响应之前,请确保将流位置设置为0,如下所示:

memoryStream.Position = 0;