Ecrire une image sur un serveur local
mise à Jour
la réponse acceptée était bonne pour l'année dernière mais aujourd'hui j'utiliserais le paquet tout le monde utilise: https://github.com/mikeal/request
Original
j'essaie de récupérer le logo de google et de le sauvegarder sur mon serveur avec node.js.
C'est ce que j'ai en ce moment et ça ne marche pas:
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!');
});
});
});
Comment faire pour que ça marche?
53
demandé sur
serv-inc
2011-03-14 06:38:31
4 réponses
quelques événements qui se produisent ici:
- je suppose que vous aviez besoin de fs / http, et définir la variable dir:)
- google.com redirige vers www.google.com, donc vous sauvegardez le corps de la réponse de redirection, pas l'image
- la réponse est diffusée en continu. cela signifie que les 'données' événement se déclenche plusieurs fois, pas une seule fois. vous devez sauvegarder et joindre tous les morceaux ensemble pour obtenir le corps de réponse complète
- puisque vous êtes obtenir des données binaires, vous devez définir l'encodage en conséquence sur la réponse et writeFile (par défaut est utf8)
cela devrait marcher:
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.')
})
})
})
77
répondu
Ricardo Tomasi
2011-10-07 22:43:26
ce fil est vieux mais je voulais faire la même chose avec le https://github.com/mikeal/request paquet .
voici un exemple pratique
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!");
});
});
33
répondu
m4tm4t
2013-12-10 09:30:58
je vous suggère d'utiliser requête http , pour que même les redirections soient gérées.
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);
}
});
26
répondu
Drasill
2014-11-26 13:06:05
Qu'en est-il?
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.')
})
})
5
répondu
yuqin
2014-11-05 03:07:39