从不同的文件路径在内存中创建Zip文件,然后在C#中下载

时间:2018-06-28 06:35:57

标签: c# asp.net-mvc model-view-controller

我试图使用ZipArchive类从其他位置创建和下载zip文件。

文件位于不同的文件路径中。我想在c#内存对象中创建一个zip文件,然后下载而不将zip 文件保存在c#/ MVC中。

我尝试过这样:

public void DownloadZipFromMultipleFile()
{
   using (var memoryStream = new MemoryStream())
   {
      using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
      {
         archive.CreateEntryFromFile(Server.MapPath("~/Content/appStyle.css"), "myStyle.css");
         archive.CreateEntryFromFile(Server.MapPath("~/NewPath/myScript.js"), "script.js");
      }
   }

   //archive.Save(Response.OutputStream);
}

我已成功将文件添加到archive,但无法将文件下载为zip文件。

1 个答案:

答案 0 :(得分:0)

正如 PapitoSh 在评论部分所建议的那样,我在现有代码的基础上增加了几行,现在一切正常。

public void DownloadZipFromMultipleFile()
{
   using (var memoryStream = new MemoryStream())
   {
      using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
      {
         archive.CreateEntryFromFile(Server.MapPath("~/Content/appStyle.css"), "myStyle.css");
         archive.CreateEntryFromFile(Server.MapPath("~/NewPath/myScript.js"), "script.js");
      }

      byte[] bytesInStream = memoryStream.ToArray(); // simpler way of converting to array 
      memoryStream.Close(); 
      Response.Clear(); 
      Response.ContentType = "application/force-download"; 
      Response.AddHeader("content-disposition", "attachment; filename=name_you_file.zip"); 
      Response.BinaryWrite(bytesInStream); Response.End();
   }

   //archive.Save(Response.OutputStream);
}