2017-03-25 1 views
0

저는 응용 프로그램에 심각한 문제가 있습니다. node.js 및 express.js로 구축하고 있습니다.
앱이 동영상을 mp3로 변환합니다. 비디오가 5 분 길이까지 작을 때 모든 것이 예상대로 작동하면 http 서버는 클라이언트에 다운로드 버튼으로 응답합니다.
비디오가 너무 크면 서버가 조기에 연결을 닫고 HTTP 프로토콜을 사용하기 때문에 클라이언트가 요청을 다시 시도하고이 시간은 일정 시간 대기 한 후에 ERR_EMPTY_RESPONSE를받습니다.Express js 서버에서 ERR_EMPTY_RESPONSE를 제공합니다.

app.post('/', function(req, res) {  

    var obj_dlConvert = apart_dl_cv.dlConvert(req.body.yt_url,140,apart_dl_cv.generateDir()); //the function that download from youtube and convert 
    var lien = obj_dlConvert.link; 
    var dossier = obj_dlConvert.dossier; 
    var video_stream = obj_dlConvert.streame; 

    obj_dlConvert.processus.on('end',() =>{ 
     fs.rename(path.join(__dirname,'uploads',dossier,dossier+'.mp3'), path.join(__dirname,'uploads',dossier,'video.mp3'), function(err) { 
      if (err) { 
       res.render('dlpage.hbs',{ 
        renameError: true     
       }); 
      }else res.render('dlpage.hbs',{ 
       dossier: dossier, 
       fullLink: lien 
      }); 
     });   
    }   
} 

req.on("close", function() { 
    obj_dlConvert.processus.kill(); 
    obj_dlConvert.processus.on('error',() => { 
     if (fs.existsSync(path.join(__dirname,'uploads',dossier))){ 
      fse.removeSync(path.join(__dirname,'uploads',dossier)); 
     } 
    }); 
}); 

});

+1

일부 코드는 유용 할 것입니다 ...... –

+0

파일의 실제 다운로드를 처리하는 경로 처리기를 추가 할 수 있습니까? – robertklep

+0

안녕하세요 @JeremyThille 여기에 몇 가지 코드가 있습니다. 도움을 주셔서 감사합니다. – sparpar

답변

0

한 번만 다루는 동영상이 아닙니다. 브라우저와 서버 사이에는 손떨림이 있습니다. 서버는 브라우저에서 요청할 때 '다음'청크를 제공 할 수 있어야합니다. 다음은 영감으로 사용할 수 있습니다 :

var fs = require("fs"), 
http = require("http"), 
url = require("url"); 

exports.serveVideo = function(req, res, file) { 
var range = req.headers.range; 
var positions = range.replace(/bytes=/, "").split("-"); 
var start = parseInt(positions[0], 10); 

fs.stat(file, function(err, stats) { 
    var total = stats.size; 
    var end = positions[1] ? parseInt(positions[1], 10) : total - 1; 
    var chunksize = (end - start) + 1; 

    res.writeHead(206, { 
    "Content-Range": "bytes " + start + "-" + end + "/" + total, 
    "Accept-Ranges": "bytes", 
    "Content-Length": chunksize, 
    "Content-Type": "video/mp4" 
    }); 

var stream = fs.createReadStream(file, { start: start, end: end }) 
    .on("open", function() { 
    stream.pipe(res); 
    }).on("error", function(err) { 
    res.end(err); 
    }); 
}); 
}