Javascript 无法使用node.js和request保存远程映像

Javascript 无法使用node.js和request保存远程映像,javascript,node.js,request,Javascript,Node.js,Request,我想用node.js和。到目前为止,我有一个简单的代码: 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

我想用node.js和。到目前为止,我有一个简单的代码:

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

但它不起作用。图像总是损坏的。我假设这是一个编码错误,但我不知道如何解决这个问题。

以下是我如何使用
管道
,(我使用的是
express
,但您可能不需要它)

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

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

我在请求页面上看到了使用流媒体变量的示例。虽然这通常是可行的,但我需要使用回调的变量,因为我运行了一些进一步的逻辑来决定是否保存图像。但是谢谢你的回答!这是很多我没有要求的东西,但我相信这会对某人有所帮助。谢谢分享!
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) {});
});
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")})
})