(無償) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

2017年10月9日月曜日

【.NET Core 2.0】ブラウザからのアップロードファイルを受けて保存し、再びダウンロードさせるコード

ブラウザからファイルをアップロードし、サーバーにテンポラリファイルに保存後、
ファイル名を変えてダウンロードさせてブラウザに保存させる一連の流れを示すためのコード

実際に使用したソースコードから、一部抜粋、改変しているため、
そのままでは動作しないかもしれません。


■Viewの作成

<form method="post" enctype="multipart/form-data" asp-controller="Test" asp-action="Index">
            <input type="file" name="Targetfile" />
            <input type="submit" value="Upload" />
</form>


■アクションメソッドの作成
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using System.IO;
//GET時に使用されるアクションメソッド
public IActionResult Index()
        {
            return View();
        }
//ポスト時に使用されるアクションメソッド
[HttpPost]
public IActionResult Index(IFormFile Targetfile)
        {
            var filename = "Result-"+System.DateTime.Now.ToString("yyyyMMddHHmmss");
            //ファイルをダウンロード
            return File(GetStream(SaveAndGetFilePath(Targetfile)), "APPLICATION/octet-stream",filename);
        }

//IFormFile型のオブジェクトからファイルを抽出しファイルに保存し、ファイルパスを返すメソッド
private String SaveAndGetFilePath(IFormFile ff)
        {
            String filePath = Path.GetTempFileName();
            if (ff.Length > 0)
            {
                using (var stream = new FileStream(filePath, FileMode.Create))
                {
                    ff.CopyTo(stream);
                }
                return filePath;
            }
            else
            {
                return null;
            }
        }

//ファイルパスからストリームを生成するメソッド
private Stream GetStream(String filepath)
        {
            var memory = new MemoryStream();
            using (var stream = new FileStream(filepath, FileMode.Open))
            {
                stream.CopyTo(memory);
            }
            memory.Position = 0;
            return memory;
        }


<Fileメソッド>
Microsoft.AspNetCore.Mvc.ControllerBase.File メソッド

○引数(オーバーロードが11もある。)
上記で使用しているものについて
・System.IO.Stream型
・コンテンツタイプを表す文字列
・ダウンロード時のファイル名を表す文字列

○返す値
Microsoft.AspNetCore.Mvc.FileStreamResult 型

クライアントにステータス200OKを返して、Stream型で指定された内容をファイルとしてダウンロードさせる。

ASP.NET MVCプログラミング入門 (マイクロソフト関連書)

新品価格
¥3,456から
(2018/5/21 15:43時点)


<参考>
・File uploads in ASP.NET Core
< https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads > 2017年10月9日

・Upload/Download Files in ASP.NET Core 2.0
< https://www.codeproject.com/Articles/1203408/Upload-Download-Files-in-ASP-NET-Core > 2017年10月9日

・Return file in ASP.Net Core Web API
< https://stackoverflow.com/questions/42460198/return-file-in-asp-net-core-web-api > 2017年10月9日

・How do I write out a text file in C# with a code page other than UTF-8?
< https://stackoverflow.com/questions/373365/how-do-i-write-out-a-text-file-in-c-sharp-with-a-code-page-other-than-utf-8 > 2017年10月14日