imagen frombase64string example desencriptar decodificar convertir convert como c# string file base64 filestream

frombase64string - desencriptar base64 c#



Codifique un FileStream a base64 con c# (5)

Dado que el archivo será más grande, no tiene muchas opciones para hacerlo. No puede procesar el archivo en su lugar ya que destruirá la información que necesita usar. Tienes dos opciones que puedo ver:

  1. Lea todo el archivo, codifique en base64, vuelva a escribir los datos codificados.
  2. Lee el archivo en partes más pequeñas, codifica a medida que avanzas. Codificar en un archivo temporal en el mismo directorio. Cuando haya terminado, elimine el archivo original y cambie el nombre del archivo temporal.

Por supuesto, todo el punto de las corrientes es evitar este tipo de escenario. En lugar de crear el contenido y meterlo en un flujo de archivos, rellénalo en un flujo de memoria. Luego codifica eso y solo luego guarda en el disco.

Sé cómo codificar / decodificar una cadena simple a / desde base64 .

Pero, ¿cómo haría eso si los datos ya se han escrito en un objeto FileStream ? Digamos que solo tengo acceso al objeto FileStream y no a los datos originales almacenados anteriormente en él. ¿Cómo codificaría un FileStream a base64 antes de vaciar el FileStream a un archivo?

Ofc Podría abrir mi archivo y codificarlo / decodificarlo después de haber escrito FileStream en el archivo, pero me gustaría hacerlo todo en un solo paso sin hacer dos operaciones de archivo una tras otra. El archivo podría ser más grande y también tardaría el doble de tiempo en cargarlo, codificarlo y guardarlo nuevamente después de que se guardó un poco antes.

Tal vez alguien de ustedes sepa una mejor solución? ¿Puedo convertir FileStream en una cadena, codificar la cadena y luego volver a convertir la cadena a FileStream, por ejemplo, o qué haría y cómo se vería ese código?


Fácil como método de extensión.

public static class Extensions { public static Stream ConvertToBase64(this Stream stream) { byte[] bytes; using (var memoryStream = new MemoryStream()) { stream.CopyTo(memoryStream); bytes = memoryStream.ToArray(); } string base64 = Convert.ToBase64String(bytes); return new MemoryStream(Encoding.UTF8.GetBytes(base64)); } }


No se olvide:

stream.Seek(0, SeekOrigin.Begin);

al comienzo del método ... ;-)


Puedes intentar algo así :

public Stream ConvertToBase64(Stream stream) { Byte[] inArray = new Byte[(int)stream.Length]; Char[] outArray = new Char[(int)(stream.Length * 1.34)]; stream.Read(inArray, 0, (int)stream.Length); Convert.ToBase64CharArray(inArray, 0, inArray.Length, outArray, 0); return new MemoryStream(Encoding.UTF8.GetBytes(outArray)); }