はじめに
S3にファイルを保存
- S3にファイルをアップロードする際にタグの情報を付与することが出来る。タグの情報は署名付きURLを取得する際にタグと同じ条件のユーザーのみ取得できるようにするためにファイルにタグを付与している
$object_key = Storage::disk('s3')->putFile($this->user->id.'/chat', $request->file('file'), [
'Tagging' => 'hogehogeid='. $this->hogehogeid
]);
S3に保存されているファイルを署名付きURLの生成方法
protected function _getS3SignatureImageURL($key)
{
// S3Clientを設定
$s3Client = new S3Client([
'version' => 'latest',
'region' => config("filesystems.disks.s3.region"),
'credentials' => [
'key' => config("filesystems.disks.s3.key"),
'secret' => config("filesystems.disks.s3.secret"),
],
]);
$bucket = config("filesystems.disks.s3.bucket");
// タグの情報を取得
$tags = $s3Client->getObjectTagging([
'Bucket' => $bucket,
'Key' => $key,
]);
// hogehogeidとは異なるタグが設定されている場合、署名付きURLはNULLで返す
if ($tags['TagSet'][0]['Value'] === $this->hogehogeid) {
// S3オブジェクトのキーを指定して、署名付きURLを生成
$expires = '+180 minutes'; // 有効期限
$cmd = $s3Client->getCommand('GetObject', [
'Bucket' => $bucket,
'Key' => $key,
]);
$request = $s3Client->createPresignedRequest($cmd, $expires);
// 署名付きURLを取得する
$presignedUrl = (string)$request->getUri();
return $presignedUrl;
} else {
return null;
}
}