スポンサーリンク

C# (.NET) でファイルを受け取る Web API の作成方法

この記事では、.NETのIFormFile を使ってファイルを受け取る Web API を実装する方法を解説します。単一ファイル、および複数ファイルのアップロードに対応したサンプルコードを紹介します。

単一ファイルを受け取る API

まずは、1つのファイルを受け取って保存するシンプルな例です。

コントローラーのコード

以下のコードは、アップロードされたファイルを UploadedFiles フォルダに保存する Web API の一部です。

        [HttpPost("upload")]
        public async Task<IActionResult> UploadFile(IFormFile file)
        {
            var uploadsFolder = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles");

            if (!Directory.Exists(uploadsFolder))
            {
                Directory.CreateDirectory(uploadsFolder);
            }

            var filePath = Path.Combine(uploadsFolder, file.FileName);

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }

            return Ok(new { message = "アップロード成功", fileName = file.FileName });
        }

以下のようにPostmanなどで実行すると、プロジェクトのフォルダにディレクトリとファイルが作成されて、レスポンスもファイル名を確認できます。

複数ファイルを受け取る API

複数ファイルを同時にアップロードしたい場合は、以下のように書き換えます。

        [HttpPost("upload-multiple")]
        public async Task<IActionResult> UploadMultipleFiles(List<IFormFile> files)
        {
            var uploadsFolder = Path.Combine(Directory.GetCurrentDirectory(), "UploadedFiles");
            Directory.CreateDirectory(uploadsFolder);

            foreach (var file in files)
            {
                var filePath = Path.Combine(uploadsFolder, file.FileName);
                using var stream = new FileStream(filePath, FileMode.Create);
                await file.CopyToAsync(stream);
            }

            return Ok(new { message = "複数ファイルのアップロード成功", count = files.Count });
        }

補足事項

  • ファイルは multipart/form-data 形式で送信する必要があります。
  • 今回はFileStreamにしてアップロードしたりしましたが、MemoryStreamなどの他のStreamに変換したりもできます。
  • 大きなファイルに対応するには RequestSizeLimit や DisableRequestSizeLimitのアトリビュートを使うことで調整できます。

まとめ

IFormFileを使えば、簡単にファイルアップロード機能を持つ API を作成できます。サーバーサイドでのファイル処理が必要な場面では、活用できるかと思います。

.NET
スポンサーリンク
シェアする
trelab