この記事では、.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 を作成できます。サーバーサイドでのファイル処理が必要な場面では、活用できるかと思います。