サーバの処理を通じてcsvなどをダウンロードする際、FileResultを使用します この場合のActionは例えば以下のようなコードになります
public IActionResult Csv() { return File(System.IO.File.OpenRead("xxx.csv"), "text/csv"); }
非常に簡単ですが多くの場合はこれでうまくいきます
しかし、メディアファイルの場合は少し事情が違います
public IActionResult Media() { return File(System.IO.File.OpenRead("xxx.m4a"), "media/mp4"); }
このActionのページにアクセスするとブラウザの機能でプレイヤーが開かれ、メディアファイルが再生されます。(以下の画像はFirefoxの場合開かれるプレイヤーです)
ただし、このプレイヤーは再生位置をシークできない問題があります
ヘッダーにAccept-Ranges: bytesを追加することで正常にシークできるメディアファイルを返すことができます
public IActionResult Media() { Response.Headers.Add("Accept-Ranges", "bytes"); // ←これを追加 return File(System.IO.File.OpenRead("xxx.m4a"), "media/mp4"); }