Saltar al contenido

Cómo convertir un archivo a byte array ¿en memoria?

Nuestros investigadores estrellas han agotado sus reservas de café, investigando noche y día por la respuesta, hasta que Alicia encontró la respuesta en Gitea y hoy la comparte con nosotros.

Solución:

A diferencia de guardar los datos como un string (que asigna más memoria de la necesaria y podría no funcionar si los datos binarios null bytes en él), recomendaría un enfoque más como

foreach (var file in files)

  if (file.Length > 0)
  
    using (var ms = new MemoryStream())
    
      file.CopyTo(ms);
      var fileBytes = ms.ToArray();
      string s = Convert.ToBase64String(fileBytes);
      // act on the Base64 data
    
  

Además, para beneficio de otros, el código fuente de IFormFile se puede encontrar en GitHub

Puedes simplemente escribir una extensión simple:

public static class FormFileExtensions

    public static async Task GetBytes(this IFormFile formFile)
    
        using (var memoryStream = new MemoryStream())
        
            await formFile.CopyToAsync(memoryStream);
            return memoryStream.ToArray();
        
    

Uso

var bytes = await formFile.GetBytes();
var hexString = Convert.ToBase64String(bytes);

Puede usar el siguiente código para convertirlo en un byte array:

foreach (var file in files)

   if (file.Length > 0)
    
      var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
      using (var reader = new StreamReader(file.OpenReadStream()))
      
        string contentAsString = reader.ReadToEnd();
        byte[] bytes = new byte[contentAsString.Length * sizeof(char)];
        System.Buffer.BlockCopy(contentAsString.ToCharArray(), 0, bytes, 0, bytes.Length);
      
   

Si estás de acuerdo, puedes dejar una sección acerca de qué te ha parecido este artículo.

¡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 *