ASP.NET MVC で自サイトの myImage フォルダ内にある複数の PNG ファイルをまとめてダウンロードできるようにしたいのですね。
この場合、サーバー側で ZIP にまとめて返すのが一般的です。
以下は サンプルコード(C#)です。
1. コントローラー側(ZIP生成して返す)
using System.IO;
using System.IO.Compression;
using System.Web.Mvc;
public class DownloadController : Controller
{
public ActionResult Images()
{
// myImage フォルダのパス
string imageFolder = Server.MapPath("~/myImage");
string[] files = Directory.GetFiles(imageFolder, "*.png");
// メモリ上で ZIP 作成
using (var memoryStream = new MemoryStream())
{
using (var zip = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
foreach (var filePath in files)
{
var entry = zip.CreateEntry(Path.GetFileName(filePath));
using (var entryStream = entry.Open())
using (var fileStream = System.IO.File.OpenRead(filePath))
{
fileStream.CopyTo(entryStream);
}
}
}
memoryStream.Position = 0;
return File(memoryStream.ToArray(),
"application/zip",
"images.zip");
}
}
}
2. ビュー側(ダウンロードリンク)
<a href="@Url.Action("Images", "Download")">画像をまとめてダウンロード</a>
ポイント
Server.MapPath("~/myImage") でアプリ内のフォルダを取得。Directory.GetFiles(..., "*.png") で PNG のみ取得。System.IO.Compression.ZipArchive を使って ZIP をメモリ上で生成。File() メソッドで ZIP を返すことで、ブラウザがダウンロードを開始。
Powered by Froala Editor