目的
複数のcsvファイルをzipにまとめてダウンロードするやり方のメモ。
準備
DotNetZipを使用します。(中身のIonic.Zip.dllを使用)
NuGetで追加するのが簡単だと思います。
コード
public ActionResult DownloadZip(){
var csv1 = "hoge,moge,piyo";
var csv2 = "foo,bar";
var zip = new Ionic.Zip.ZipFile();
zip.AddEntry("csv1.csv", Encoding.GetEncoding("Shift_JIS").GetBytes(csv1));
zip.AddEntry("csv2.csv", Encoding.GetEncoding("Shift_JIS").GetBytes(csv2));
var ms = new MemoryStream();
zip.Save(ms);
ms.Position = 0;
return File(ms, System.Net.Mime.MediaTypeNames.Application.Zip, "FileName.zip");
}
まとめ
ZipFileインスタンスを作ってファイル名とbyte配列を追加していき、MemoryStreamに格納してFileResultで返すという流れです。
当然csv以外のファイルも可能。