.Net Framework nos permite comprimir archivos o informacion en memoria haciendo uso del namespace System.IO.Compression.
Este namespace contiene 2 clases que representan a los 2 algoritmos de compresion que vienen incorporados con .Net, Deflate y GZip, el codigo que se presenta mas adelante utiliza GZip.
using System;
using System.IO;
using System.IO.Compression;
using System.Collections.Generic;
using System.Linq;
using System.Web;
public class CompressClass
{
private byte[] LeerBytes(Stream param)
{
byte[] buffer = new byte[param.Length];
using (MemoryStream ms = new MemoryStream())
{
int bytesRead = 0;
do
{
bytesRead = param.Read(buffer, 0, buffer.Length);
if (bytesRead > 0)
{
ms.Write(buffer, 0, bytesRead);
}
} while (bytesRead > 0);
return ms.ToArray();
}
}
public static byte[] GetCompression(Stream param)
{
using (MemoryStream memoria = new MemoryStream())
{
using (GZipStream algoritmogzip = new GZipStream(memoria, CompressionMode.Compress, true))
{
algoritmogzip.Write(LeerBytes(param), 0, (int)param.Length);
}
return memoria.ToArray();
}
}
}
Como podrán ver por el código, es muy sencillo, no hay para que complicarse.
El resultado o retorno del método lo he dejado intencionalmente como un arreglo de bytes, esto para que se pueda utilizarlo como respuesta de un response en u entorno web o para que lo carguen al objeto stream de su preferencia.
Somo usar la clase
byte[] compressInfo = CompressClass.GetCompression(new StreamReader(Server.MapPath("images/piechart.tiff"), true).BaseStream);
0 comments:
Publicar un comentario