LoginSignup
0
0

More than 1 year has passed since last update.

.NET6 WebAPIでファイルアップロード

Posted at

せしまるです。

業務で.NET6使っていて、ファイルのアップロードでちょっと躓いたので備忘録

構成

サーバサイド
・.NET6
・C#
クライアントサイド
・Vue3
・TypeScript
・Quasar Framework

やったこと

クライアントサイドからのファイルアップロード。
画面によって複数ファイルアップロードすることあり

本編

ファイル選択はQFileでやってます。
下記フォームデータ作る部分

UploadCommand.ts
export class UploadCommand extends UploadBase<any> {
  constructor(files: File[]) {
    this.files = files;
  }
  files: File[] = [];
}
UploadBase.ts
~~~省略~~~
this.configure = (config, data) => {
  if (config.headers) {
    config.headers["content-type"] = "multipart/form-data";
  }

  let form = new FormData();
  for (let key in data) {
    // データが複数の場合(複数ファイル)
    if (Array.isArray(data[key])) {
      for (let d in data[key]) {
        // key値「files」に対して複数のファイルをappend
        form.append(key, data[key][d]);
      }
    } else {
      form.append(key, data[key]);
    }
  }
  config.data = form;
};
~~~

次にサーバ側で受け取る部分

TestController.cs
[ApiController]
[Route( "api/test" )]
public class TestController : Controller
{
    [HttpPost]
    [Route( "upload" )]
    public async Task<ActionResult> Insert( [FromForm] UploadCommand command )
    {
        // なにかしらの処理
        return Success();
    }
}
UploadCommand.cs
public class InsertInformationCommand
{
    // ファイルはIFormFileで受け取る
    // アップロードしたファイルリストがここに入ってくる
    public List<IFormFile> ImportFiles { get; set; }
}

サーバ側でのファイルの受け取り方は、
・1ファイルならIFormFile
・複数ファイルならIFormFileCollection、IEnumerable、Listのどれか

サーバ側で受け取れたならあとは保存するなり読み込んでほげほげするなり。

おわり

Command/Handlerパターン使ってるのそのまま持ってきてるから見づらかったらすみません。

おわり

参考
https://learn.microsoft.com/ja-jp/aspnet/core/mvc/models/file-uploads?view=aspnetcore-7.0

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0