ASP.NET Core WebAPIでファイルアップロードを行う
ASP.NET CoreのWebAPIでmultipart/form-dataのリクエストでファイルをアップロードする機能を実装します。
.NET5, .NET6などが対象です。
モデルの作成
まずは、リクエストを受け取るモデルを作成します。
リクエストのfileという名前をキーにアップロードされたファイルを受け取るようにします。
.NET5以降の場合は以下のようにClassの代わりにRecordを使用すればシンプルになります。
using Microsoft.AspNetCore.Mvc;
public record DocumentCreateRequest(
[FromForm(Name = "file")]
IFormFile File);コントローラーの作成
アップロードするURLを定義するため、コントローラーを定義します。
以下のように、[FromForm]を付与して、POSTリクエストされたフォームデータを上記で定義したDocumentCreateRequestで受け取るようにします。
DocumentController [HttpPost]
public async Task<IActionResult> Create([FromForm] DocumentCreateRequest request)
{
// 保存処理など
}ファイルを読み込む
アップロードされたファイルを読み込み、バイト配列として扱えるようにします。
以下のような拡張メソッドを定義しておくと便利です。
public static class Extensions
{
public static async Task<byte[]> GetBytesAsync(this IFormFile formFile)
{
using var memoryStream = new MemoryStream();
await formFile.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
}以下のように、アップロードされたファイル名やファイルの中身を取得できますので、どこかのディレクトリに保存したり、DBにblob型で保存したりできます。
DocumentController [HttpPost]
public async Task<IActionResult> Create([FromForm] DocumentCreateRequest request)
{
string filename = request.File.FileName;
byte[] content = await request.File.GetBytesAsync();
// ファイルを保存
System.IO.File.WriteAllBytes(Path.Combine("保存場所のフォルダパス", filename), content);
}動作確認
swaggerで動作確認します。
以下のようにファイルを選択して実行できるようになります。 
ファイルをダウンロードする方法はASP.NET Core WebAPIでファイルをダウンロードするで紹介しています。