Symfony 使用BinaryFileResponse从AWS S3传输文件的速度非常慢

Symfony 使用BinaryFileResponse从AWS S3传输文件的速度非常慢,symfony,amazon-web-services,amazon-s3,stream,gaufrette,Symfony,Amazon Web Services,Amazon S3,Stream,Gaufrette,我正在从事一个Symfony2.8项目,并使用Gaufrete管理存储在AWS S3存储桶中的文件。我的文件需要是私有的,因此我尝试将文件从S3流式传输到最终用户,而不是使用S3公共URL。我让它使用StreamWrapper和BinaryFileResponse,但它的速度非常慢——一个2.5MB的文件需要20秒以上的时间,如果超过20秒,由于我的web服务器有30秒的时间限制,任何文件都会失败。我做错了什么 以下是我的控制器类中相关操作的代码: /** * @Route("/docs/ge

我正在从事一个Symfony2.8项目,并使用Gaufrete管理存储在AWS S3存储桶中的文件。我的文件需要是私有的,因此我尝试将文件从S3流式传输到最终用户,而不是使用S3公共URL。我让它使用StreamWrapper和BinaryFileResponse,但它的速度非常慢——一个2.5MB的文件需要20秒以上的时间,如果超过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);
}

脚注:我意识到盲目地将
$file
从请求传递到我的文件路径是一个潜在的安全漏洞——我稍后会处理这个问题。你找到这个性能问题的答案了吗?@FélixVeysseyre不幸的是,我没有——我最终放弃了从我的web服务器提供文件服务,并将路由更改为重定向到带有1小时访问令牌的S3预签名URL。如果您愿意的话,我经常这样做的代码如下:脚注:我意识到盲目地将
$file
从请求传递到我的文件路径是一个潜在的安全漏洞——我稍后会处理这个问题。您找到这个性能问题的答案了吗?@Félixveysseyr不幸的是,我没有——我最终放弃了从我的web服务器上提供文件,改变了路由,用一个1小时的访问令牌重定向到一个S3预签名URL。如果您愿意,我以前的代码如下: