【问题标题】:PHP AWS S3 - Download a file using content-disposition without streamingPHP AWS S3 - 使用内容处置下载文件而不使用流式传输
【发布时间】:2018-08-01 14:20:23
【问题描述】:

我在公共 S3 存储桶上有一些视频,我需要为它们创建一个下载链接。

最初,我打算使用 Guzzle 从公共链接获取文件并添加标题内容处置,以便将文件推送到 浏览器。

    $client->get('s3/path');
    $client = $client->withAddedHeader('Content-Disposition', 'attachment; filename=' . $videoName);
    return $client;

但是,DevOps 团队告诉我,这会给我们的服务器带来不必要的压力,因此需要另谋出路。

我知道我可以直接在存储桶中的文件上设置 content-disposition 标头,但是有没有办法在访问公共链接时设置它?如果没有,是否可以对存储桶中的文件夹设置策略以始终向其中上传的文件添加内容处置?

我还应该提到,要上传,我使用的是 Drupal 8 模块 S3FS 和一个文件字段,这意味着我无权访问上传过程来设置上传标题。但是,上传后是否可以更新标头?

【问题讨论】:

    标签: amazon-web-services amazon-s3 drupal-8


    【解决方案1】:

    我知道我可以直接在文件上设置 content-disposition 标头 在存储桶中,但是有没有办法将其设置为访问 公开链接?

    是的,但您必须创建一个预签名的 URL 并覆盖 Content-Disposition 标头。这是来自AWS docs 的修改示例:

    //Creating a presigned URL
    $cmd = $s3Client->getCommand('GetObject', [
        'Bucket' => 'my-bucket',
        'Key'    => 'testKey',
        'Content-Disposition' => ''
    ]);
    
    $request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
    
    // Get the actual presigned-url
    $presignedUrl = (string) $request->getUri();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多