Mettre à jour
La réponse acceptée était bonne pour l’année dernière, mais aujourd’hui, j’utiliserais le paquet que tout le monde utilise: https://github.com/mikeal/request
Original
J'essaie de récupérer le logo de Google et de l'enregistrer sur mon serveur avec node.js.
C'est ce que j'ai maintenant 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 puis-je obtenir ce travail?
Quelques choses qui se passent ici:
Cela devrait fonctionner:
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.')
})
})
})
Ce fil est ancien mais je voulais faire la même chose avec le paquet https://github.com/mikeal/request .
Voici un exemple de travail
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!");
});
});
Je vous suggère d'utiliser http-request , de sorte 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);
}
});
Que dis-tu de ça?
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.')
})
})
J'ai une solution plus facile en utilisant fs.readFileSync(./my_local_image_path.jpg)
Ceci concerne la lecture d'images à partir de API Azure Cognitive Services Vision
const subscriptionKey = 'your_Azure_subscrition_key';
const uriBase = // **MUST change your location (mine is 'eastus')**
'https://eastus.api.cognitive.Microsoft.com/vision/v2.0/analyze';
// Request parameters.
const params = {
'visualFeatures': 'Categories,Description,Adult,Faces',
'maxCandidates': '2',
'details': 'Celebrities,Landmarks',
'language': 'en'
};
const options = {
uri: uriBase,
qs: params,
body: fs.readFileSync(./my_local_image_path.jpg),
headers: {
'Content-Type': 'application/octet-stream',
'Ocp-Apim-Subscription-Key' : subscriptionKey
}
};
request.post(options, (error, response, body) => {
if (error) {
console.log('Error: ', error);
return;
}
let jsonString = JSON.stringify(JSON.parse(body), null, ' ');
body = JSON.parse(body);
if (body.code) // err
{
console.log("Azure: " + body.message)
}
console.log('Response\n' + jsonString);
Le plus propre moyen de sauvegarder l'image localement en utilisant request :
const request = require('request');
request('http://link/to/your/image/file.png').pipe(fs.createWriteStream('fileName.png'))
Si vous avez besoin de ajouter un jeton d'authentification dans les en-têtes, procédez comme suit:
const request = require('request');
request({
url: 'http://link/to/your/image/file.png',
headers: {
"X-Token-Auth": TOKEN,
}
}).pipe(fs.createWriteStream('filename.png'))