私は最近、(。NET Core 2.0で開発された)APIを呼び出すReactJSアプリに取り組んでいます。
私の質問は、ファイルのコンテンツを取得してデータベースに保存するために、.NET Core 2.0 APIでHttpPostedFileBase
を使用する方法です。
ASP.NET Core 2.0にはHttpPostedFileBase
はありませんが、IFormFile
を使用できます。
[HttpPost("UploadFiles")]
public async Task<IActionResult> Post(List<IFormFile> files)
{
long size = files.Sum(f => f.Length);
// full path to file in temp location
var filePath = Path.GetTempFileName();
foreach (var formFile in files)
{
if (formFile.Length > 0)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
}
// process uploaded files
// Don't rely on or trust the FileName property without validation.
return Ok(new { count = files.Count, size, filePath});
}
詳細: https://docs.Microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.1
IFormFile
は次の名前空間にありますMicrosoft.AspNetCore.Http
。
HttpPostedFileBase
はASP.NET Coreには存在しません。代わりに、今すぐIFormFile
を使用してください。ただし、これは、リクエストをmultipart/form-data
として送信した場合にのみ機能します。Reactのようなクライアント側フレームワークを使用している場合は、そうしない可能性があります。 JSONを投稿する場合は、Base64文字列としてエンコードされたファイルを使用して、ファイルプロパティに対応するJSONメンバーを設定する必要があります。サーバー側では、byte[]
にバインドする必要があります。
誰かがHttpPostedFileBase
を検索してこれを見つけた場合は、次のようなASP.NETコントローラーメソッドの記述に精通している可能性があります。
_public async Task<IActionResult> DoThing(MyViewModel model, HttpPostedFileBase fileOne, HttpPostedFileBase fileTwo)
{
//process files here
}
_
ASP.NET Coreで同等のものを記述したい場合は、次のように記述できます。
_public async Task<IActionResult> DoThing(MyViewModel model, IFormFile fileOne, IFormFile fileTwo)
{
//process files here
}
_
つまり、メソッドシグネチャに必要な唯一の変更は、HttpPostedFileBase
をIFormFile
で置き換えることです。次に、新しいパラメータータイプで機能するようにメソッドを変更する必要があります(たとえば、HttpPostedFileBase
にはInputStream
プロパティがあり、IFormFile
にはOpenReadStream()
メソッドがあります。 )しかし、私はそれらの違いの詳細はこの質問の範囲を超えていると思います。