wwwroot net iformfile asp asp.net ajax file upload asp.net-core

asp.net - iformfile - net core 2.1 upload file



Request.Files en ASP.NET CORE (2)

Estoy tratando de cargar archivos usando aspnet core usando una solicitud ajax. En versiones anteriores de .net solía manejar esto usando

foreach (string fileName in Request.Files) { HttpPostedFileBase file = Request.Files[fileName]; //Save file content goes here fName = file.FileName; (...)

pero ahora muestra un error en request.files ¿cómo puedo hacer que funcione? Busqué y encontré que httppostedfile ha sido cambiado a iformfile pero cómo manejar request.files?


Este código funciona al 100% para ambos archivos cargados con forma regular o ajax:

[HttpPost] public async Task<IActionResult> Upload(IList<IFormFile> files) { foreach (IFormFile source in files) { string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.Trim(''"''); filename = this.EnsureCorrectFilename(filename); using (FileStream output = System.IO.File.Create(this.GetPathAndFilename(filename))) await source.CopyToAsync(output); } return this.RedirectToAction("Index"); } private string EnsureCorrectFilename(string filename) { if (filename.Contains("//")) filename = filename.Substring(filename.LastIndexOf("//") + 1); return filename; } private string GetPathAndFilename(string filename) { return this.HostingEnvironment.WebRootPath + "//files//" + filename; }


Este es el código de trabajo de un proyecto reciente. Los datos se han movido de Request.Files a Request.Form.Files . En caso de que necesite convertir una matriz de bytes a bytes, esta es la única implementación que funcionó para mí. Otros devolverían matriz vacía.

using System.IO; var filePath = Path.GetTempFileName(); foreach (var formFile in Request.Form.Files) { if (formFile.Length > 0) { using (var inputStream = new FileStream(filePath, FileMode.Create)) { // read file to stream await formFile.CopyToAsync(inputStream); // stream to byte array byte[] array = new byte[inputStream.Length]; inputStream.Seek(0, SeekOrigin.Begin); inputStream.Read(array, 0, array.Length); // get file name string fName = formFile.FileName; } } }