我正在开发一个 Symfony2.8 项目,并使用 Gaufrette 来管理我存储在 AWS S3 存储桶中的文件。我的文件需要是私有的,因此我不使用 S3 公共 URL,而是尝试将文件从 S3 流式传输到我的最终用户。我让它与 StreamWrapper 和 BinaryFileResponse 一起工作,但它非常慢——一个 2.5 MB 的文件需要 20 秒以上,并且由于我的 Web 服务器的 30 秒时间限制,任何大于该文件的文件都会失败。我究竟做错了什么?
这是我的控制器类中相关操作的代码:
/**
* @Route("/docs/get/{file}", name="document_read")
*/
public function documentReadAction(Request $request, $file)
{
$filesystem = $this->container->get('knp_gaufrette.filesystem_map')->get('docs');
$map = StreamWrapper::getFilesystemMap();
$map->set('docs', $filesystem);
$filepath = 'gaufrette://docs/'.$file;
return new BinaryFileResponse($filepath);
}