экспресс res.download, обслуживающий до 0 байт файлов - PullRequest
0 голосов
/ 30 июня 2018

res.download обслуживает файл, но после загрузки он равен 0 байтам? Есть идеи?

app.get('/download', function(req, res) {
    console.log("download");
    console.log(req.query.fileID);
    fileDownload(req.query.fileID, function(rep){
        if(rep.success){
              console.log("Serving File to User, File: " + rep.data);
              res.download(__dirname +  "/" + rep.data, rep.data)   

        }else{
            console.log(res);
        }
    });
})

A ls в папке показывает, что файл готов к загрузке, имена указаны правильно и все в окне загрузки, которое отображает браузер, но загрузка всегда имеет размер 0 байт.

Проверка файла из файла загрузки файла. Да, он есть, и да, все хорошо.

МОЖЕТ БЫТЬ ВЫПУСК: Думаю, проблема в том, что файл не был полностью загружен до того, как он был передан клиенту, см. Ниже, я попытаюсь добавить обратный вызов в ТРУБУ .....

function fileDownload(id, callback){
    info(id, function(res){
        if(!res.error){
            info(id, function(res){
                if(!res.error){
                    //console.log(res.data);
                    var d = JSON.parse(res.data);
                    //console.log(d['file_name']);
                    var url2 = baseurl + "/api/file/" + id ;
                    var r = request(url2);
                    r.on('response',  function (res) {
                        res.pipe(fs.createWriteStream('./' + d['id'] + d['file_name']));
                        console.log("Download Done: " + './' + d['id'] + d['file_name']);
                        return callback({success:true, data:d['id'] + d['file_name']});
                    });
                }else{
                    console.log("ERROR: " + res.data)
                    return callback({success:false, data: res.data});
                }
            });
        }else{
            console.log("ERROR: " + res.data)
            return callback({success:false, data: res.data});
        }
    });

};

1 Ответ

0 голосов
/ 13 июля 2018

Проблема заключалась в том, что файл был обслужен до того, как поток завершил запись,

исправлено добавление .on ('close') к потоку.

 r.on('response',  function (res) {
                        res.pipe(fs.createWriteStream('./' + d['id'] + d['file_name']).on('close', function() {
                            console.log('file done');
                            console.log("Download Done: " + './' + d['id'] + d['file_name']);
                            return callback({success:true, data:d['id'] + d['file_name']});
                          }));
                        console.log("You should not see this");

                    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...