subir servidor node mostrar imagenes imagen ejemplos con node.js http-get

node.js - servidor - subir imagenes con node js



Escribir imagen en el servidor local (4)

Actualizar

La respuesta aceptada fue buena para el año pasado, pero hoy usaría el paquete que todos usan: https://github.com/mikeal/request

Original

Intento agarrar el logo de google y guardarlo en mi servidor con node.js.

Esto es lo que tengo ahora y no funciona:

var options = { host: ''google.com'', port: 80, path: ''/images/logos/ps_logo2.png'' }; var request = http.get(options); request.on(''response'', function (res) { res.on(''data'', function (chunk) { fs.writeFile(dir+''image.png'', chunk, function (err) { if (err) throw err; console.log(''It/'s saved!''); }); }); });

¿Cómo puedo hacer que esto funcione?


Algunas cosas que suceden aquí:

  1. Supongo que necesitabas fs / http, y estableciste la variable dir :)
  2. google.com redirige a www.google.com, por lo que está guardando el cuerpo de la respuesta de redireccionamiento, no la imagen
  3. la respuesta es transmitida eso significa que el evento ''datos'' se dispara muchas veces, no una vez. tienes que guardar y unir todos los fragmentos para obtener el cuerpo de respuesta completo
  4. ya que está obteniendo datos binarios, debe configurar la codificación según corresponda en response y writeFile (el valor predeterminado es utf8)

Esto debería funcionar:

var http = require(''http'') , fs = require(''fs'') , options options = { host: ''www.google.com'' , port: 80 , path: ''/images/logos/ps_logo2.png'' } var request = http.get(options, function(res){ var imagedata = '''' res.setEncoding(''binary'') res.on(''data'', function(chunk){ imagedata += chunk }) res.on(''end'', function(){ fs.writeFile(''logo.png'', imagedata, ''binary'', function(err){ if (err) throw err console.log(''File saved.'') }) }) })


Este hilo es antiguo, pero quería hacer las mismas cosas con el paquete https://github.com/mikeal/request .

Aquí un ejemplo de trabajo

var fs = require(''fs''); var request = require(''request''); // Or with cookies // var request = require(''request'').defaults({jar: true}); request.get({url: ''https://someurl/somefile.torrent'', encoding: ''binary''}, function (err, response, body) { fs.writeFile("/tmp/test.torrent", body, ''binary'', function(err) { if(err) console.log(err); else console.log("The file was saved!"); }); });


Sugiero que use http-request , para que incluso se gestionen los redireccionamientos.

var http = require(''http-request''); var options = {url: ''http://localhost/foo.pdf''}; http.get(options, ''/path/to/foo.pdf'', function (error, result) { if (error) { console.error(error); } else { console.log(''File downloaded at: '' + result.file); } });


¿Qué tal esto?

var http = require(''http''), fs = require(''fs''), options; options = { host: ''www.google.com'' , port: 80, path: ''/images/logos/ps_logo2.png'' } var request = http.get(options, function(res){ //var imagedata = '''' //res.setEncoding(''binary'') var chunks = []; res.on(''data'', function(chunk){ //imagedata += chunk chunks.push(chunk) }) res.on(''end'', function(){ //fs.writeFile(''logo.png'', imagedata, ''binary'', function(err){ var buffer = Buffer.concat(chunks) fs.writeFile(''logo.png'', buffer, function(err){ if (err) throw err console.log(''File saved.'') }) })