web-dev-qa-db-ja.com

Asp.Net Core 2.0の「HttpPostedFileBase」

私は最近、(。NET Core 2.0で開発された)APIを呼び出すReactJSアプリに取り組んでいます。

私の質問は、ファイルのコンテンツを取得してデータベースに保存するために、.NET Core 2.0 APIでHttpPostedFileBaseを使用する方法です。

15
Abhay.Patil

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

4
Razvan Dumitru

HttpPostedFileBaseはASP.NET Coreには存在しません。代わりに、今すぐIFormFileを使用してください。ただし、これは、リクエストをmultipart/form-dataとして送信した場合にのみ機能します。Reactのようなクライアント側フレームワークを使用している場合は、そうしない可能性があります。 JSONを投稿する場合は、Base64文字列としてエンコードされたファイルを使用して、ファイルプロパティに対応するJSONメンバーを設定する必要があります。サーバー側では、byte[]にバインドする必要があります。

1
Chris Pratt

誰かが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
}
_

つまり、メソッドシグネチャに必要な唯一の変更は、HttpPostedFileBaseIFormFileで置き換えることです。次に、新しいパラメータータイプで機能するようにメソッドを変更する必要があります(たとえば、HttpPostedFileBaseにはInputStreamプロパティがあり、IFormFileにはOpenReadStream()メソッドがあります。 )しかし、私はそれらの違いの詳細はこの質問の範囲を超えていると思います。

1
Tim