无法使用node.js和请求保存远程映像

时间:2014-11-04 11:30:24

标签: javascript node.js request

我想用node.js和request library保存图像。到目前为止,我有这个简单的代码:

var request = require('request');
var fs = require('fs');

request('http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg', function(error, response, body)
{
    // further logic that decides
    // whether or not the image will be saved

    fs.writeFile('downloaded.jpg', body, function(){});
});

但它不起作用。图像总是到达腐败状态。我认为这是一个编码错误,但我无法弄清楚如何解决这个问题。

3 个答案:

答案 0 :(得分:26)

var request = require('request'), 
    fs      = require('fs'),
    url     = 'http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg';

request(url, {encoding: 'binary'}, function(error, response, body) {
  fs.writeFile('downloaded.jpg', body, 'binary', function (err) {});
});

答案 1 :(得分:5)

var fs = require('fs'),
    request = require('request'),
    url='http://upload.wikimedia.org/wikipedia/commons/8/8c/JPEG_example_JPG_RIP_025.jpg';

request(url).pipe(fs.createWriteStream('downloaded.jpg'));

答案 2 :(得分:2)

以下是我使用streampipe的方式,(我使用的是express,但您可能不需要这样做)

var express = require('express');
var app = express();
var filesystem = require('fs');
var https = require('https');


var download = function(url, dest, cb) {
   var file = filesystem.createWriteStream(dest);
   var request = https.get(url, function(httpResponse) {
    httpResponse.pipe(file);
    file.on('finish', function() {
      console.log("piping to file finished")
      file.close(cb);  // close() is async, call cb after close completes.
    });
   }).on('error', function(err) { // Handle errors
    filesystem.unlink(dest); // Delete the file async. (But we don't check the result)
    if (cb) cb(err.message);
   });
};

app.get('/image', (req, res) => {
 download('https://lastfm-img2.akamaized.net/i/u/64s/15cc734fb0e045e3baac02674d2092d6.png',
          'porcupine.png', 
           () => {console.log("downloaded to porcupine.png")})
})

当我使用node server.js运行并点击网址localhost:3000/image时,它会将文件下载并保存到基本目录中的porcupine.png