ver online metapicz metadatos extraer archivo analizador c# image file httpwebrequest

c# - online - Cómo utilizar httpwebrequest para extraer la imagen del sitio web al archivo local



metapicz (4)

Bien, aquí está la respuesta final. Utiliza un flujo de memoria como una forma de almacenar los datos del flujo de respuesta.

private void button1_Click(object sender, EventArgs e) { byte[] lnBuffer; byte[] lnFile; HttpWebRequest lxRequest = (HttpWebRequest)WebRequest.Create("http://www.productimageswebsite.com/images/stock_jpgs/34891.jpg"); using (HttpWebResponse lxResponse = (HttpWebResponse)lxRequest.GetResponse()) { using (BinaryReader lxBR = new BinaryReader(lxResponse.GetResponseStream())) { using (MemoryStream lxMS = new MemoryStream()) { lnBuffer = lxBR.ReadBytes(1024); while (lnBuffer.Length > 0) { lxMS.Write(lnBuffer, 0, lnBuffer.Length); lnBuffer = lxBR.ReadBytes(1024); } lnFile = new byte[(int)lxMS.Length]; lxMS.Position = 0; lxMS.Read(lnFile, 0, lnFile.Length); } } } using (System.IO.FileStream lxFS = new FileStream("34891.jpg", FileMode.Create)) { lxFS.Write(lnFile, 0, lnFile.Length); } MessageBox.Show("done"); }

Estoy tratando de usar una aplicación c # local para extraer algunas imágenes de un sitio web a archivos en mi máquina local. Estoy usando el código que figura a continuación. He probado tanto la codificación ASCII como la codificación UTF8, pero el archivo final no es correcto. ¿Alguien ve lo que estoy haciendo mal? La URL está activa y correcta y muestra la imagen correctamente cuando coloco la dirección en mi navegador.

private void button1_Click(object sender, EventArgs e) { HttpWebRequest lxRequest = (HttpWebRequest)WebRequest.Create("http://www.productimageswebsite.com/images/stock_jpgs/34891.jpg"); // returned values are returned as a stream, then read into a string String lsResponse = string.Empty; HttpWebResponse lxResponse = (HttpWebResponse)lxRequest.GetResponse(); using (StreamReader lxResponseStream = new StreamReader(lxResponse.GetResponseStream())) { lsResponse = lxResponseStream.ReadToEnd(); lxResponseStream.Close(); } byte[] lnByte = System.Text.UTF8Encoding.UTF8.GetBytes(lsResponse); System.IO.FileStream lxFS = new FileStream("34891.jpg", FileMode.Create); lxFS.Write(lnByte, 0, lnByte.Length); lxFS.Close(); MessageBox.Show("done"); }


Puede usar el siguiente método para descargar una imagen de un sitio web y guardarla, usando la clase de imagen:

WebRequest req = WebRequest.Create(imageUrl); WebResponse resp = req.GetResponse(); Image img = Image.FromStream(resp.GetResponseStream()); img.Save(filePath + fileName + ".jpg");


Una variación de la respuesta, usando async, espera por la entrada / salida asíncrona del archivo . Vea la E / S de archivos asíncronos sobre por qué esto es importante.

Descargue png y escriba en el disco con BinaryReader / Writer

string outFile = System.IO.Path.Combine(outDir, fileName); // Download file var request = (HttpWebRequest) WebRequest.Create(imageUrl); using (var response = await request.GetResponseAsync()){ using (var reader = new BinaryReader(response.GetResponseStream())) { // Read file Byte[] bytes = async reader.ReadAllBytes(); // Write to local folder using (var fs = new FileStream(outFile, FileMode.Create)) { await fs.WriteAsync(bytes, 0, bytes.Length); } } }

Lea todo el método de extensión de bytes

public static class Extensions { public static async Task<byte[]> ReadAllBytes(this BinaryReader reader) { const int bufferSize = 4096; using (var ms = new MemoryStream()) { byte[] buffer = new byte[bufferSize]; int count; while ((count = reader.Read(buffer, 0, buffer.Length)) != 0) { await ms.WriteAsync(buffer, 0, count); } return ms.ToArray(); } } }


bonita imagen: D

intente usar el siguiente código:

necesitabas usar un BinaryReader, porque un archivo de imagen son datos binarios y, por lo tanto, no están codificados en UTF o ASCII

edición: utilizando

HttpWebRequest lxRequest = (HttpWebRequest)WebRequest.Create( "http://www.productimageswebsite.com/images/stock_jpgs/34891.jpg"); // returned values are returned as a stream, then read into a string String lsResponse = string.Empty; using (HttpWebResponse lxResponse = (HttpWebResponse)lxRequest.GetResponse()){ using (BinaryReader reader = new BinaryReader(lxResponse.GetResponseStream())) { Byte[] lnByte = reader.ReadBytes(1 * 1024 * 1024 * 10); using (FileStream lxFS = new FileStream("34891.jpg", FileMode.Create)) { lxFS.Write(lnByte, 0, lnByte.Length); } } } MessageBox.Show("done");