2014-12-08 2 views
0

대용량 파일을 처리하는 서버가 있고 범위 요청을 지원합니다.수정 방법 오류 : "오류 : 시작이 <= 끝이어야합니다."

가 완료하려고 할 때 그러나, nodejs이 오류를 던지고있다 :

fs.js:1488 
     throw new Error('start must be <= end'); 
      ^
Error: start must be <= end 
    at new ReadStream (fs.js:1488:13) 
    at Object.fs.createReadStream (fs.js:1449:10) 
    at inicioStream (/home/harold/fileserver/app.js:639:17) 
    at fn (/home/harold/node_modules/async/lib/async.js:641:34) 
    at Object._onImmediate (/home/harold/node_modules/async/lib/async.js:557:34) 
    at processImmediate [as _immediateCallback] (timers.js:345:15) 

나는 그것이 어떻게 문제를 해결하는 방법을 알고 싶습니다.

var path = __dirname + '/backup/'+location; 
var rs = fs.createReadStream(path, {start: download.range.start, end: download.range.end}); 

감사합니다 :

는 여기이 오류를 생성하는 코드의 일부입니다!

+0

당신이 "지원 범위 요청"에 의해 무엇을 의미하는지에 대해 구체적 수 있습니까? 잘못된 범위 (시작이 끝보다 큰 범위)가 전달되었지만 더 많은 정보가 없으면 어디에서 왔는지 말할 수 없습니다. – wisew

+0

사용자가 부분 요청을 할 수 있습니다. "Range"http 헤더. –

답변

0

사용자는 Range HTTP 헤더를 통해 이러한 대용량 파일을 부분 요청할 수 있으므로이 오류는 범위가 유효하지 않은 경우 언제든지 throw 될 수 있습니다. 이 경우 download.range.start 값이 download.range.end보다 크므로 요청 된 범위가 유효하지 않습니다. 항상 반대 방향이어야합니다. 항상이 오류가 발생할 수있는 가능성이이기 때문에

, 당신은 당신의 코드에서 잡을해야합니다 :

var rs = fs.createReadStream(path, {start: download.range.start, end: download.range.end}); 
rs.on('error', function(err) { 
    // code to handle error - maybe return a response saying the range is invalid? 
}); 
+0

나는이 가능성에 대해 생각하지 않았고 내 코드를 수정 하겠지만 지금은 그렇지 않습니다. 다운로드가 완료되지 않았으며 파일이 99,99 % 다운로드되면이 오류가 발생합니다. 다운로드가 끝났습니다. 그리고 아직 내 코드를 깨려고하지는 않습니다. –

+0

흠 나는 그 때 무슨 일이 일어나고 있는지 잘 모르겠습니다. 위의 코드를'download'의 값으로 업데이트 하시겠습니까? – wisew

+0

실제로 [fs.createReadStream] (http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options)에 대한 문서를 보면,'options' 객체에'encoding' 속성을 전달해야하는지 궁금합니다. 너무. – wisew