zukucode
主にWEB関連の情報を技術メモとして発信しています。

ASP.NET Core WebAPIでファイルアップロードを行う

ASP.NET CoreWebAPImultipart/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 WebAPIでファイルアップロード

ファイルをダウンロードする方法はASP.NET Core WebAPIでファイルをダウンロードするで紹介しています。


関連記事