PHP AWS S3-使用内容处置下载文件而无需流

时间:2018-08-01 14:20:23

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

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

最初,我将使用Guzzle从公共链接中获取文件,并添加标头的content-disposition,以便将文件推送到 浏览器。

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

但是,DevOps团队告诉我,这将给我们的服务器带来不必要的压力,并找到另一种方法。

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

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

1 个答案:

答案 0 :(得分:0)

  

我知道我可以直接在文件上找到content-position标头   在存储桶中,但是有一种方法可以仅在访问   公共链接?

是的,但是您将必须创建一个预签名的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();