Asp.net

從 MVC 操作返回多個文件

  • October 3, 2012

所以我有一個 MVC 3 應用程序,它有幾個地方生成文本文件並在操作中返回:

return File(System.Text.Encoding.UTF8.GetBytes(someString),
                "text/plain", "Filename.extension");

這非常有效。現在我遇到了一種情況,我試圖以類似的方式返回一對文件。在視圖中,我有一個操作連結,例如“點擊此處獲取這 2 個文件”,我希望下載這兩個文件,就像在上面的程式碼片段中下載單個文件一樣。

我怎樣才能做到這一點?一直在搜尋,甚至沒有看到任何地方提出這個問題……

基於 Yogendra Singh 的想法並使用DotNetZip

var outputStream = new MemoryStream();

using (var zip = new ZipFile())
{
   zip.AddEntry("file1.txt", "content1");
   zip.AddEntry("file2.txt", "content2");
   zip.Save(outputStream);
}

outputStream.Position = 0;
return File(outputStream, "application/zip", "filename.zip");

2019 年4 月 10 日更新: 正如 @Alex 所指出的,自 .NET Framework 4.5 起,來自JitBit和其他人的本地支持壓縮:

using (var memoryStream = new MemoryStream())
{
  using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
  {
     var file1 = archive.CreateEntry("file1.txt");
     using (var streamWriter = new StreamWriter(file1.Open()))
     {
        streamWriter.Write("content1");
     }

     var file2 = archive.CreateEntry("file2.txt");
     using (var streamWriter = new StreamWriter(file2.Open()))
     {
        streamWriter.Write("content2");
     }
  }

  return File(memoryStream.ToArray(), "application/zip", "Images.zip")
}

引用自:https://stackoverflow.com/questions/12713710