【问题标题】:How to Implement Resumable Download in Silex如何在 Silex 中实现可恢复下载
【发布时间】:2014-09-22 09:14:34
【问题描述】:

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 并完成它。但是,如果有一种笨拙的方式来做到这一点,那就太好了。

【问题讨论】:

  • Silex HTTP 的核心是基于 Symphony 组件,您应该添加symfony 以扩展您的问题的读者数量
  • 我发现了一些东西(不是用 Symfony Components/Silex 编写的),但它似乎可以工作..gist.github.com/kosinix/4cf0d432638817888149
  • @ohartl - 我写了那个要点 :-)
  • 这有点好笑:)

标签: symfony silex


【解决方案1】:

如果您在驱动器上有文件,则实现它非常简单。这就像从表中对记录进行分页一样。

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

您只需要了解一点请求和响应的标头即可。

服务器是否接受范围:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 2022-01-04
    • 2016-05-18
    • 2014-10-14
    相关资源
    最近更新 更多