MVCアクションから複数のファイルを返す 質問する

MVCアクションから複数のファイルを返す 質問する

そこで、次のコードを使用してテキスト ファイルが生成され、アクションで返される場所がいくつかある MVC 3 アプリケーションを作成しました。

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

これは見事に機能します。今、同様の方法で 2 つのファイルを返そうとしている状況があります。ビューには、「ここをクリックして 2 つのファイルを取得」のようなアクション リンクがあり、上記のコード スニペットで単一のファイルがダウンロードされるのと同じように、両方のファイルをダウンロードしたいと考えています。

どうすればこれを実現できるでしょうか? かなり検索してみましたが、この質問がどこにも出ているのを見たことがありません...

ベストアンサー1

ヨゲンドラ・シンのアイデアを基にしてドットネットジップ:

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/04/10更新:@Alexが指摘したように、圧縮は.NET Framework 4.5以降でネイティブにサポートされています。ジットビットその他:

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")
}

おすすめ記事