Busboy nodejs процесс никогда не вызывает событие fini sh - PullRequest
0 голосов
/ 10 января 2020

Я пытаюсь загрузить некоторые файлы с помощью busboy, если я запускаю свое приложение nodejs локально, оно работает очень хорошо, но если я докеризую это приложение и протестирую его, процесс загрузки никогда не войдет в busboy при событии fini sh , Кто-нибудь может мне помочь? Я пробую разные модули для загрузки и никогда не работает. Я что-то забыл?

    busBoyCreateProjectUpload(req){
    return new Promise((resolve, reject) => {
        logger.log({message:'Process busboy', level:'info'});
        const busboy = new Busboy({ headers: req.headers });
        let files = 0, finished = false;
        let projName=""
        let json = {};
        busboy.on('field', function(fieldname, val) {
            logger.log({message:'Process busboy inside field function with key: '+fieldname, level:'info'});
            json[fieldname] = val;
            if(fieldname=="projName"){
                projName=inspect(val).replace(/[\']/g,"");
            }
        });
        busboy.on('file', async function (fieldname, file, filename) {
            let path="";
            if (fs.existsSync(`${process.env.archiveDirectoryTemp}/${projName}/${process.env.assets}`)) {
                if (filename.includes('mp4')) {
                    logger.log({message:'Process busboy inside upload function with file: '+filename, level:'info'});
                    logger.log({message:`mkdir ${process.env.archiveAssets}/${projName}`, level:'info'});
                    await makeDirPromisified(`${process.env.archiveAssets}/${projName}`, { recursive: true });
                    path = `${process.env.archiveAssets}/${projName}/${filename}`;
                } else {
                    logger.log({message:'Process busboy inside upload function with file: '+filename, level:'info'});
                    path = `${process.env.archiveDirectoryTemp}/${projName}/${process.env.assets}/${projName}/${filename}`;
                }
                ++files;
                logger.log({message:'Uploading file: '+filename, level:'info'});
                const fstream = fs.createWriteStream(path);
                file.pipe(fstream);
                file.resume();
                fstream.on('close', function() {
                    files--;
                    file.close();
                    logger.log({message:"Upload Finished of " + filename, level:'info'});
                    if(files == 0 && finished){
                        logger.log({message:"Writing finished", level:'info'});
                        resolve(json);
                        return;
                    }
                });
            }else{
                reject("Error js/res folder does not exist in generated template");
                return;
            }
        });
        busboy.on('finish', function() {
            logger.log({message:'Process busboy finished', level:'info'});
            finished = true;
        });
         return req.pipe(busboy);
    });
},
...