ASP.NET Core 6 WebAPIで複数のファイルストリームをクライアントにレスポンスとして返す方法を解説します。
複数のファイルストリーム返却 実装方法
ASP.NET Core 6 WebAPIで複数のファイルストリームをクライアントにレスポンスとして返すには、PushStreamContent
を使用する方法があります。
また、返り値のMIMEタイプにはapplication/octet-streamを設定する必要があります。
[HttpGet("download")]
public IActionResult Download()
{
var files = GetFiles(); // ファイルストリームを取得する処理
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new PushStreamContent(async (stream, content, context) =>
{
try
{
foreach (var file in files)
{
using (var fileStream = file.OpenRead()) // ファイルストリームを取得する処理に置き換える
{
var fileName = file.Name; // ファイル名を取得する
var fileContent = new StreamContent(fileStream);
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileName // ダウンロード時のファイル名を設定する
};
await fileContent.CopyToAsync(stream);
}
}
}
finally
{
stream.Close();
}
});
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return new ResponseMessageResult(response);
}