wake-up-neo.com

'HttpPostedFileBase' in Asp.Net Core 2.0

Ich arbeite kürzlich an einer ReactJS-App, die eine API aufruft (entwickelt mit .NET Core 2.0).

Meine Frage ist, wie man HttpPostedFileBase in einer .NET Core 2.0-API verwendet, um Dateiinhalte abzurufen und in der Datenbank zu speichern.

15
Abhay.Patil

Sie haben HttpPostedFileBase in ASP.NET Core 2.0 nicht, aber Sie können IFormFile verwenden.

[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});
}

Mehr hier: https://docs.Microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-2.1

IFormFile befindet sich im folgenden Namespace Microsoft.AspNetCore.Http.

4
Razvan Dumitru

HttpPostedFileBase existiert in ASP.NET Core nicht. Sie sollten stattdessen jetzt IFormFile verwenden. Dies funktioniert jedoch nur, wenn Sie die Anforderung als multipart/form-data Senden. Dies ist wahrscheinlich nicht der Fall, wenn Sie mit einem clientseitigen Framework wie React arbeiten. Wenn Sie JSON veröffentlichen, sollten Sie das JSON-Mitglied, das Ihrer Dateieigenschaft entspricht, mit der als Base64-Zeichenfolge codierten Datei festlegen. Serverseitig sollten Sie dann an byte[] Binden.

1
Chris Pratt

Wenn jemand dies findet, indem er nach HttpPostedFileBase sucht, sind Sie möglicherweise mit dem Schreiben von ASP.NET-Controller-Methoden wie folgt vertraut:

public async Task<IActionResult> DoThing(MyViewModel model, HttpPostedFileBase fileOne, HttpPostedFileBase fileTwo)
{
   //process files here
}

Wenn Sie ein Äquivalent in ASP.NET Core schreiben möchten, können Sie es folgendermaßen schreiben:

public async Task<IActionResult> DoThing(MyViewModel model, IFormFile fileOne, IFormFile fileTwo)
{
   //process files here
}

d.h. die einzige Änderung, die an der Methodensignatur erforderlich ist, besteht darin, HttpPostedFileBase durch IFormFile zu ersetzen. Sie müssen dann Ihre Methode ändern, um mit dem neuen Parametertyp zu arbeiten (z. B. HttpPostedFileBase hat eine InputStream -Eigenschaft, während IFormFile eine OpenReadStream() -Methode hat ), aber ich denke, die Details dieser Unterschiede gehen über den Rahmen dieser Frage hinaus.

1
Tim