1
0
Fork 0
mirror of synced 2024-06-02 10:54:44 +12:00

fix range header support for streaming

This commit is contained in:
Damodar Lohani 2021-09-13 12:02:45 +05:45
parent b0bdcebd15
commit 547302c80c

View file

@ -1062,21 +1062,24 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download')
->addHeader('Content-Disposition', 'attachment; filename="' . $file->getAttribute('name', '') . '"')
;
$size = $device->getFileSize($path);
$size = $file->getAttribute('sizeOriginal', 0);
// Range header
$rangeHeader = $request->getHeader('range');
if(!empty($rangeHeader)) {
list($unit, $range) = explode('=', $rangeHeader);
if($unit == 'bytes' && !empty($range)) {
list($rangeStart, $rangeEnd) = explode('-', $range);
if(strlen($rangeStart) == 0 || strlen($rangeEnd) == 0) {
throw new Exception('Invalid range', 400);
if(strlen($rangeStart) == 0) {
throw new Exception('Invalid range', 416);
}
$rangeStart = (int) $rangeStart;
$rangeEnd = (int) $rangeEnd;
if(($rangeStart >= $rangeEnd) || $rangeEnd > $size) {
throw new Exception('Invalid range', 400);
if(strlen($rangeEnd) == 0) {
$rangeEnd = min(($rangeStart + 2000000-1), ($size - 1));
} else {
$rangeEnd = (int) $rangeEnd;
}
if(($rangeStart >= $rangeEnd) || $rangeEnd >= $size) {
throw new Exception('Invalid range', 416);
}
$response
@ -1085,7 +1088,7 @@ App::get('/v1/storage/buckets/:bucketId/files/:fileId/download')
->addHeader('Content-Length', $rangeEnd - $rangeStart + 1)
->setStatusCode(Response::STATUS_CODE_PARTIALCONTENT);
} else {
throw new Exception('Invalid range', 400);
throw new Exception('Invalid range', 416);
}
}