Amazon web services PHP AWS S3-使用内容处置下载文件,无需流式处理
我在一个公共S3存储桶上有一些视频,我需要为它们创建一个下载链接 最初,我打算使用Guzzle从公共链接获取文件,并添加标题内容配置,以便将文件推送到 浏览器Amazon web services PHP AWS S3-使用内容处置下载文件,无需流式处理,amazon-web-services,amazon-s3,drupal-8,Amazon Web Services,Amazon S3,Drupal 8,我在一个公共S3存储桶上有一些视频,我需要为它们创建一个下载链接 最初,我打算使用Guzzle从公共链接获取文件,并添加标题内容配置,以便将文件推送到 浏览器 $client->get('s3/path'); $client = $client->withAddedHeader('Content-Disposition', 'attachment; filename=' . $videoName); return $client; 然而,DevOps团队告诉
$client->get('s3/path');
$client = $client->withAddedHeader('Content-Disposition', 'attachment; filename=' . $videoName);
return $client;
然而,DevOps团队告诉我,这将给我们的服务器带来不必要的压力,并找到另一种方法
我知道我可以直接在bucket中的文件上设置contentdisposition头,但是有没有办法在访问公共链接时设置这个头呢?如果没有,是否可以对bucket中的文件夹设置策略,以便始终将内容处置添加到上载到其中的文件
我还应该提到,为了上传,我使用了Drupal 8模块S3FS和一个文件字段,这意味着我无法访问上传过程来设置上传时的标题。但是,上传后是否可以更新标题
我知道我可以直接在文件上使用内容处置头
在bucket中,但是有没有一种方法可以将其设置为访问
公共链接
是的,但您必须创建一个预签名的URL并覆盖内容处置头。以下是一个修改后的示例:
//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();