wwwroot net images how from files asp asp.net-core-mvc httppostedfilebase

asp.net-core-mvc - images - upload files net core



MVC 6 HttpPostedFileBase? (3)

Estoy intentando subir una imagen usando MVC 6 ; sin embargo, no puedo encontrar la clase HttpPostedFileBase . He revisado el GitHub y no he tenido suerte. ¿Alguien sabe la forma correcta de cargar un archivo en MVC6 ?

Realmente apreciado, Steven M.


Estuve buscando durante un buen rato intentando juntar esto en el núcleo .net y terminé con el siguiente. La conversión de Base64 estará próxima a realizarse para que la recuperación y la visualización sean un poco más fáciles. He utilizado IFormFileCollection para poder hacer varios archivos.

[HttpPost] public async Task<IActionResult> Create(IFormFileCollection files) { Models.File fileIn = new Models.File(); if(model != null && files != null) { foreach (var file in files) { if (file.Length > 0) { var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim(''"''); byte[] fileBytes = null; using (var fileStream = file.OpenReadStream()) using (var ms = new MemoryStream()) { fileStream.CopyTo(ms); fileBytes = ms.ToArray(); //string s = Convert.ToBase64String(fileBytes); // act on the Base64 data } fileIn.Filename = fileName; fileIn.FileLength = Convert.ToInt32(file.Length); fileIn.FileType = file.ContentType; fileIn.FileTypeId = model.FileTypeId; fileIn.FileData = fileBytes; _context.Add(fileIn); await _context.SaveChangesAsync(); } } } return View(); }

EDITAR

Y a continuación se muestra el retorno de los archivos a una lista y luego descargarlos.

public JsonResult GetAllFiles() { var files = _context.File .Include(a => a.FileCategory) .Select(a => new { id = a.Id.ToString(), fileName = a.Filename, fileData = a.FileData, fileType = a.FileType, friendlyName = a.FriendlyName, fileCategory = a.FileCategory.Name.ToLower() }).ToList(); return Json(files); } public FileStreamResult DownloadFileById(int id) { // Fetching file encoded code from database. var file = _context.File.SingleOrDefault(f => f.Id == id); var fileData = file.FileData; var fileName = file.Filename; // Converting to code to byte array byte[] bytes = Convert.FromBase64String(fileData); // Converting byte array to memory stream. MemoryStream stream = new MemoryStream(bytes); // Create final file stream result. FileStreamResult fileStream = new FileStreamResult(stream, "*/*"); // File name with file extension. fileStream.FileDownloadName = fileName; return fileStream; }


MVC 6 usó otro mecanismo para subir archivos. Puede obtener más ejemplos en GitHub u other sources . Simplemente use IFormFile como un parámetro de su acción o una colección de archivos o IFormFileCollection si quiere cargar algunos archivos al mismo tiempo:

public async Task<IActionResult> UploadSingle(IFormFile file) { FileDetails fileDetails; using (var reader = new StreamReader(file.OpenReadStream())) { var fileContent = reader.ReadToEnd(); var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition); var fileName = parsedContentDisposition.FileName; } ... } [HttpPost] public async Task<IActionResult> UploadMultiple(ICollection<IFormFile> files) { var uploads = Path.Combine(_environment.WebRootPath,"uploads"); foreach(var file in files) { if(file.Length > 0) { var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim(''"''); await file.SaveAsAsync(Path.Combine(uploads,fileName)); } ... } }

Puede ver el contrato actual de IFormFile en fuentes asp.net . Vea también ContentDispositionHeaderValue para información adicional del archivo.


No hay HttpPostedFileBase en MVC6. Puede utilizar IFormFile en IFormFile lugar.

Ejemplo: https://github.com/aspnet/Mvc/blob/dev/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs

Fragmento del enlace de arriba:

public FileDetails UploadSingle(IFormFile file) { FileDetails fileDetails; using (var reader = new StreamReader(file.OpenReadStream())) { var fileContent = reader.ReadToEnd(); var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDisposition); fileDetails = new FileDetails { Filename = parsedContentDisposition.FileName, Content = fileContent }; } return fileDetails; }