Browse Source

avoid http 416 error when config chunk is larger than file size

pull/832/head
Jacky Jiang 4 years ago
parent
commit
5cfa35f565
  1. 24
      papaparse.js

24
papaparse.js

@ -612,6 +612,19 @@ License: MIT @@ -612,6 +612,19 @@ License: MIT
// Its value will be -1 to indicate the total size info can't be retrieve from Content-Range response header (or not available)
var totalContentSize = -1;
// the `this._config.chunkSize` could be large than total size of the file
// which lead to server response 416 (Range Not Satisfiable error) on the first chunk / range request
// If this happened on the first, we should only retry request content without range header once
var shouldDisableChunk = false;
// indicate we are processing the first chunk
// if http 416 error is captured, we will disable chunk and retry the request
var isFirstChunk = true;
// indicate we have retried the request without range header (or without end range if it's not the first chunk)
// we can check this field to make sure that we only ever retry once
var hasRetriedRequestFor416 = false;
if (IS_WORKER)
{
this._nextChunk = function()
@ -667,7 +680,7 @@ License: MIT @@ -667,7 +680,7 @@ License: MIT
}
}
if (this._config.chunkSize)
if (this._config.chunkSize && !shouldDisableChunk)
{
var end = this._start + this._config.chunkSize - 1; // minus one because byte range is inclusive
if(totalContentSize > 1 && end > totalContentSize - 1) {
@ -694,6 +707,15 @@ License: MIT @@ -694,6 +707,15 @@ License: MIT
if (xhr.readyState !== 4)
return;
if (xhr.status === 416 && isFirstChunk && !hasRetriedRequestFor416) {
isFirstChunk = false;
hasRetriedRequestFor416 = true;
shouldDisableChunk = true;
// retry once
this._nextChunk();
return;
}
if (xhr.status < 200 || xhr.status >= 400)
{
this._chunkError();

Loading…
Cancel
Save