带有fs.createWriteStream()的节点请求模块创建一个空文件

时间:2019-07-04 01:20:26

标签: javascript node.js fs node-request

我正在尝试将外部URL上传到我的服务器。这就是我到目前为止所得到的

var fs = require('fs');
var request = require('request');
var path = require('path');
const imagesFolder = 'downloadedAssets/imgs';

function download(url, dest, filename, cb) {
    var file = fs.createWriteStream(dest + "/" + filename + path.extname(url));

    request( {url: url}, function(err, response) {
        if(err) {
            console.log(err.message);
            return;
        }

        response.pipe(file);

        file.on('error', function(err) {
            console.log(err.message);
            file.end();
        });
        file.on('finish', function() {
            file.close(cb);
        });
   });
}

然后执行功能...

var url = 'http://pngimg.com/uploads/spongebob/spongebob_PNG44.png';

download(url, imagesFolder, 'sponge', function onComplete(err) {
    if (err) {
        console.log(err.message);
    } else {
        console.log('image uploaded to server');
    }
});

这不会引发任何错误,它会创建一个文件名为sponge.png的文件,但该文件为空。知道为什么吗?

1 个答案:

答案 0 :(得分:0)

您可能在官方网站上混了示例

尝试如下使用pipe()

function download(url, dest, filename, cb) {
    var file = fs.createWriteStream(dest + "/" + filename + path.extname(url));

    request( {url: url}).pipe(file);
}