IFormFile クラス、FromForm 属性などを使用して、
ASP.NET Core(.NET 6)のWebAPIでmultipart/form-dataのリクエストでファイルアップロードを受け取る方法、FromForm 属性、IFormFile クラスについて解説します。
IFormFile クラス
まずはじめに、リクエストから受け取るためのモデルが必要になります。
そのとき作成するモデル内に、IFormFile クラスのプロパティを実装します。
以下が実装例になります。
public class UploadFile
{
[DataMember(Name = "file")]
public IFormFile File { get; set; }
}
さらに、IFormFile クラスには以下のようなプロパティやメソッドがあります。
これらのプロパティとメソッドを使用することで、アップロードされたファイルに関する情報を取得し、
必要に応じて処理することができます。
public IFormFile File;
// アップロードされたファイルの名前を取得します。
File.FileName;
// アップロードされたファイルのMIMEタイプを取得します。
File.ContentType;
// アップロードされたファイルのサイズをバイト単位で取得します。
File.Length;
// アップロードされたファイルを読み取るためのストリームを開きます。
File.OpenReadStream;
FromForm
次にファイルのアップロードのリクエストを受け取るアクションメソッドを定義する必要があります。
その際に、アップロードされたファイルを受け取るためにアクションメソッドの引数に上記で定義したIFormFile クラスのモデルを設定します。
また、引数に設定したIFormFile クラスのモデルには、FromForm 属性も設定する必要があります。
FromForm 属性とは、HTTPリクエストからフォームデータを取得するために使用されます。
この属性を使用することで、HTTPリクエストのコンテンツからフォームデータを自動的に抽出し、アクションメソッドの引数にバインドすることができます。
FromForm 属性を使用することで、手動でフォームデータを抽出する必要がなくなり、コードの簡潔化ができます。
ちなみに、FromBodyやFromQueryなど、他の属性もあり、どのようなものをリクエストで受け取るのかによって用途が変わります。
以下が実装の例になります。
[HttpPost]
public IActionResult UploadFile([FromForm] UploadFile uploadFile)
{
if(uploadFile.File != null && uploadFile.File.Length > 0)
{
var reader = new StreamReader(upload.File.OpenReadStream());
var content = reader.ReadToEnd();
}
}
ASP.NET おすすめ入門講座
3つのWebアプリケーションの開発を通して、ASP.NETについて基礎から学べるおすすめの入門講座がこちら☟
【入門者向け】ASP.NET MVCでWebアプリ開発のノウハウを学ぼう!