martes, 28 de febrero de 2012

Array de Bytes desde URL

En ocasiones necesitamos la información que nos devuelve una URL (ya sea porque esta es una imagen y deseamos guardar el archivo, o por el motivo que sea). 

Se puede transformar la información contenida por la URL en un array de bytes y estos guardarlos en un archivo en nuestra máquina. Las funciones para esta transformación serían las siguientes:

 
        //obtiene un array de byte de una url/fichero en este caso
        public byte[] GetBytesFromUrl(string url)
        {
            byte[] b;
            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
            WebResponse myResp = myReq.GetResponse();

            Stream stream = myResp.GetResponseStream();
            using (BinaryReader br = new BinaryReader(stream))
            {
                b = br.ReadBytes(500000);
                br.Close();
            }
            myResp.Close();
            return b;
        }

        //Funcion para guardar un array de bytes en un fichero

        public void WriteBytesToFile(string fileName, byte[] content)
        {
            FileStream fs = new FileStream(fileName, FileMode.Create);
            BinaryWriter w = new BinaryWriter(fs);
            try
            {
                w.Write(content);
            }
            finally
            {
                fs.Close();
                w.Close();
            }
        }


En este código tan solo leemos una cantidad fija de bytes.
En función de la información que contenga la url debemos guardar un tipo de fichero u otro. Es decir esto funciona para todo tipo de información (imágenes, documentos de texto). Veamos unos ejemplos de maneras de llamar a estas funciones:

 
byte[] img = GetBytesFromUrl(@"http://maps.google.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=14&size=512x512&maptype=roadmap&markers=color:blue|label:S|40.702147,-74.015794&markers=color:green|label:G|40.711614,-74.012318&markers=color:red|color:red|label:C|40.718217,-73.998284&sensor=false");
            WriteBytesToFile(@"C:\imagen.jpg",img);

byte[] arch = GetBytesFromUrl(@"http://sauce.pntic.mec.es/~jpeo0002/Archivos/PDF/T01.pdf");
            WriteBytesToFile(@"C:\archivo.pdf",arch);

No hay comentarios:

Publicar un comentario