将图像写入本地服务器

更新

接受的答案去年是好的,但今天我会使用其他人使用的包: https : //github.com/mikeal/request


原版的

我试图抓住谷歌的标志,并保存到我的服务器node.js.

这是我现在所拥有的,不起作用的:

var options = { host: 'google.com', port: 80, path: 'http://img.dovov.comlogos/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!'); }); }); }); 

我怎样才能得到这个工作?

这里发生了一些事情:

  1. 我假设你需要fs / http,并设置目录variables:)
  2. google.comredirect到www.google.com,因此您保存redirect响应的正文,而不是图片
  3. 响应stream式传输。 这意味着“数据”事件多次触发,而不是一次。 你必须保存和join所有的大块,以获得完整的响应机构
  4. 因为你得到的是二进制数据,你必须相应地设置响应和writeFile(默认是utf8)

这应该工作:

 var http = require('http') , fs = require('fs') , options options = { host: 'www.google.com' , port: 80 , path: 'http://img.dovov.comlogos/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.') }) }) }) 

这个线程是旧的,但我想用https://github.com/mikeal/request包做同样的事情。;

这里有一个工作示例

 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!"); }); }); 

我build议你使用http-request ,这样即使redirect也是被pipe理的。

 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); } }); 

这个怎么样?

 var http = require('http'), fs = require('fs'), options; options = { host: 'www.google.com' , port: 80, path: 'http://img.dovov.comlogos/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.') }) })