我们网站的一部分允许用户安全下载文件。我们使用HTTP Ranges让拥有优秀浏览器的用户恢复下载,因为它们可以变得非常大。我们目前正在迁移到S3并希望保留下载恢复。
我实际上已经使用HTTP_RANGE和这段代码完成了所有工作:
// Calculate the end range
$rangestart = $this->iSeekStart;
$chunksize = 1024 * 1024 * 8;
// Start buffered download from S3
do
{
// reset time limit for big files
set_time_limit(0);
$rangeend = $rangestart + $chunksize;
$aData = $S3->getObject(array(
'Bucket' => $bucket,
'Key' => $key,
'Range' => 'bytes='.$rangestart.'-'.$rangeend
));
print $aData['Body'];
flush();
ob_flush();
$rangestart = $rangeend + 1;
}
while ($rangestart < $this->sFileSize);
我唯一的问题是,$chunksize
的大小是多少?太小,下载速度很慢,但我也不想通过一次从AWS获取太多数据来减慢速度。
我在S3文档中找不到很多信息,因为它的大小适合。这里有一个很好的“最佳实践”吗?
答案 0 :(得分:0)
不幸的是,我认为关于最佳块大小的文档很少的原因是没有一个。下载速度根据许多因素而变化很大,因为尺寸也会有所不同。
我会简单地使用最低带宽选项进行一些试错测试(如果适用,就像移动设备一样),看看“二分搜索”方法会发生什么。真的很大(但不荒谬);然后,如果失败,用一半测试。等等。
如果您想要更严格的内容,请在可行的情况下调查或确定客户的下载速度。然后做一些数学计算来优化普通客户的块大小。