【发布时间】:2022-04-28 08:42:51
【问题描述】:
我正在使用预签名的 url 实现 S3 文件上传和下载。我有一个 s3 存储桶(启用版本控制)和一个 AWS 用户,但我想根据我的哪些应用程序用户修改了文件来跟踪每个文件的历史记录。
我有一个版本化的 S3 存储桶,我的想法是我可以将元数据附加到每个文件以识别我的应用程序用户以及可能的其他数据。
这是我的代码:
public function presignedUpload(Request $request)
{
$this->validate($request, [
'name' => 'string|required'
]);
$s3 = Storage::disk('s3');
$client = $s3->getDriver()->getAdapter()->getClient();
$expiry = "+10 minutes";
$options = ['user-data' => 'user-meta-value'];
$cmd = $client->getCommand('PutObject', [
'Bucket' => \Config::get('filesystems.disks.s3.bucket'),
'Key' => 'path/to/file/' . $request->name,
'ACL' => 'public-read',
], $options);
$request = $client->createPresignedRequest($cmd, $expiry);
$presignedUrl = (string)$request->getUri();
return response()->json(['url' => $presignedUrl], 201);
}
我推断我可以从FilesystemAdapter::class 传递一个$options 数组。此代码确实上传了文件,但 AWS 中的元数据看起来是空的。
我的$options 数组格式是否错误?
感谢您对此的任何帮助。
【问题讨论】:
标签: php laravel amazon-web-services amazon-s3