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でファイルをダウンロードするで紹介しています。