Update
Die akzeptierte Antwort war gut für letztes Jahr, aber heute würde ich das Paket verwenden, das alle anderen verwenden: https://github.com/mikeal/request
Original
Ich versuche, das Logo von Google zu packen und es mit node.js. auf meinem Server zu speichern.
Das habe ich gerade und funktioniert nicht:
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!');
});
});
});
Wie kann ich das zum Laufen bringen?
Hier passiert ein paar Dinge:
Das sollte funktionieren:
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.')
})
})
})
Dieser Thread ist alt, aber ich wollte die gleichen Dinge mit dem Paket https://github.com/mikeal/request machen.
Hier ein Arbeitsbeispiel
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!");
});
});
Ich schlage vor, Sie verwenden http-request , damit auch Umleitungen verwaltet werden.
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);
}
});
Wie wäre es damit?
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.')
})
})
Ich habe eine einfachere Lösung mit fs.readFileSync(./my_local_image_path.jpg)
Dies ist für das Lesen von Bildern aus der Azure Cognitive Services Vision-API
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);
Sauberste Methode zum lokalen Speichern von Bildern mit request :
const request = require('request');
request('http://link/to/your/image/file.png').pipe(fs.createWriteStream('fileName.png'))
Wenn Sie Authentifizierungstoken hinzufügen in den Kopfzeilen hinzufügen müssen, gehen Sie folgendermaßen vor:
const request = require('request');
request({
url: 'http://link/to/your/image/file.png',
headers: {
"X-Token-Auth": TOKEN,
}
}).pipe(fs.createWriteStream('filename.png'))