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í:
- Supongo que necesitabas fs / http, y estableciste la variable dir :)
- google.com redirige a www.google.com, por lo que está guardando el cuerpo de la respuesta de redireccionamiento, no la imagen
- 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
- 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.'')
})
})