Grow up

生活とプログラミング

.Net CoreでExcelファイルをWebからダウンロードする方法

はじめに

WebからExcelファイルがダウンロード出来るのか疑問に思いやってみました。
今回はjqueryを使わずに出来たのでまとめてみます。

前回は圧縮ファイルのダウンロードにjqueryを使っていました。
knkomko.hatenablog.com

動作

C:\work\sample.xlsx にファイルを保存しています。
こちらのExcelファイルをWebからダウンロードしています。
f:id:knkomko:20190901235652p:plain:w450

Download ボタンを左クリックするとファイルがダウンロードできます。
f:id:knkomko:20190901235509p:plain:w450

ダウンロードしたファイルはダウンロードフォルダに保存されます。
f:id:knkomko:20190902001313p:plain:w450

文字化けも無くファイルが開けます。
f:id:knkomko:20190901235844p:plain:w450

開発環境

VisualStudio2019
MicrosoftOffice2016

ソースコード

ExcelファイルのダウンロードではFileメソッドの引数に Octet を指定します。

Controllers\FormController.cs

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace ExcelDownloadWebApp.Controllers
{
    public class FormController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public IActionResult ExcelFileDownload()
        {
            var file = System.IO.File.ReadAllBytes(@"C:\work\sample.xlsx");
            return File(file, System.Net.Mime.MediaTypeNames.Application.Octet, "sample.xlsx");
        }
    }
}

ボタン押下時にFormController の ExcelFileDownload メソッドを呼び出します。
View\Form\Index.cshtml

<h2>ExcelFileDownload</h2>
<form class="form-horizontal" asp-controller="Form" asp-action="ExcelFileDownload">
    <input name="submit" value="Download" type="submit" />
</form>
ZIPファイルのダウンロード

上記と同じ方法でjqueryを使わなくてもZIPファイルがダウンロードできました。
f:id:knkomko:20190902001348p:plain:w450

FormControllerにあるExcelFileDownload()のファイル名を変更しています。

Controllers\FormController.cs
>|cs|
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace ExcelDownloadWebApp.Controllers
{
    public class FormController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public IActionResult ExcelFileDownload()
        {
            var file = System.IO.File.ReadAllBytes(@"C:\work\sample.zip");
            return File(file, System.Net.Mime.MediaTypeNames.Application.Octet, "sample.zip");
        }
    }
}