Saltar al contenido

MVC 6 HttpPostedFileBase?

Agradeceríamos tu ayuda para extender nuestras crónicas referente a las ciencias de la computación.

Solución:

MVC 6 usó otro mecanismo para cargar archivos. Puede obtener más ejemplos en GitHub u otras fuentes. Solo usa IFormFile como un parámetro de su acción o una colección de archivos o IFormFileCollection si desea cargar algunos archivos al mismo tiempo:

public async Task 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 UploadMultiple(ICollection 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));
        
        ...
    

Puedes ver el contrato actual de IFormFile en fuentes asp.net. Ver también ContentDispositionHeaderValue para obtener información adicional sobre el archivo.

No hay HttpPostedFileBase en MVC6. Puedes usar IFormFile en lugar de.

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

Fragmento del enlace anterior:

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;

Estuve buscando durante bastante tiempo tratando de juntar esto en .net core y terminé con lo siguiente. La conversión de Base64 será la siguiente que se realizará para que la recuperación y visualización sea un poco más fácil. He usado IFormFileCollection para poder hacer varios archivos.

[HttpPost]
    public async Task 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 regreso de los archivos a una lista y luego se descargan.

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;
    

Comentarios y puntuaciones

Agradecemos que quieras añadir valor a nuestro contenido informacional cooperando tu veteranía en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *