Модуль запроса узла с помощью fs.createWriteStream () создает пустой файл - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь загрузить внешний 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 голосов
/ 04 июля 2019

Возможно, вы перепутали примеры на официальном сайте

Попробуйте использовать pipe(), как показано ниже.

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

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