[已解决]如何使用Laravel实现文件下载限速?
问题描述
项目要求说非VIP用户下载文件下要求限速。
我想到了Laravel的那个速率限制器,但很明显它并不能满足此需求,它只能适合用于对访问次数有限制的接口或页面。为此我可能需要Laravel实现此办法的思路。
解决方式
public function sliceDownload()
{
$path = 'slice/'.date('Ymd') ;
$filename = $path .'/'. '周杰伦 - 黑色幽默 [mqms2].mp3' ;
//获取文件资源
$file = Storage::disk('admin')->readStream($filename);
//获取文件大小
$fileSize = Storage::disk('admin')->size($filename);
$request->headers->set("Content-type","application/octet-stream");//设定header头为下载
$request->headers->set("Accept-Ranges","bytes");
$request->headers->set("Accept-Length","".$fileSize);//响应大小
$request->headers->set("Content-Disposition"," attachment; filename=".$filename);//文件名
//不设置的话要等缓冲区满之后才会响应
if (ob_get_contents())
ob_end_clean();//缓冲区结束
ob_implicit_flush();//强制每当有输出的时候,即刻把输出发送到浏览器\
header('X-Accel-Buffering: no'); // 不缓冲数据
$limit=1024*1024;
$count=0;
//限制每秒的速率
while($fileSize-$count>0){//循环读取文件数据
$data=fread($file,$limit);
$count+=$limit;
echo $data;//输出文件
ob_flush();//增加的.
flush();
sleep(1);
}
}
解答回报
每晚一句晚安#
sleep
vip多线程下载、非vip 限制线程数量
博客:大文件传输解决方案:分片上传 / 下载限速 我看站里这哥们写了