在silex中我可以这样强行下载文件:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
$app = new Silex\Application();
// Url can be http://pathtomysilexapp.com/download
$app->get('/download', function (Request $request) use ($app) {
$file = '/path/to/download.zip';
if( !file_exists($file) ){
return new Response('File not found.', 404);
}
return $app->sendFile($file)->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'download.zip');
});
$app->run();
Run Code Online (Sandbox Code Playgroud)
这适用于较小的文件.但是我的用例需要下载一个可由下载管理器暂停/恢复的大文件.
有一个关于文件流的例子,但它似乎不是我想要的.有人曾经这样做过吗?我可以从这里使用答案并完成它.但是,如果有一种沉默的方式,这将是很好的.
如果驱动器上有该文件,那么实现它是非常简单的。这就像对表中的记录进行分页一样。
读取标题,打开文件,查找所需位置并读取所需的大小。
您只需要了解一些有关请求和响应的标头即可。
服务器是否接受范围:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Range_requests
内容范围的 HTTP 206 状态:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/206
有关内容范围标题的信息:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range
| 归档时间: |
|
| 查看次数: |
498 次 |
| 最近记录: |