如何在Silex中实现可恢复的下载

时间:2014-09-22 09:14:35

标签: symfony silex

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();

适用于较小的文件。但是,我的用例需要下载一个可由下载管理器暂停/恢复的大文件。

有一个关于文件streaming的示例,但它似乎并不是我想要的。有人曾经这样做过吗?我可以使用answer from here并完成它。但是,如果有这种方式,那就太好了。

1 个答案:

答案 0 :(得分:0)

如果驱动器上有文件,那么实现它是非常简单的。这就像从表格中分页记录一样。

阅读标题,打开文件,寻找所需位置并阅读所要求的大小。

您只需要了解一下请求和标题中的标题。响应。

服务器是否接受范围:

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