我正在使用Laravel处理S3文件。
我的S3没有公共访问权限,但是Laravel配置了具有对S3拥有管理员权限的AWS用户。
因此,我可以毫无问题地在S3中上传文件。
我的问题来自从那里获取文件。
如果我使用:
Storage::disk('s3')->url($this->path);
我将生成一个格式为
的链接https://bucket.s3.region.amazonaws.com/path/filename.pdf
但是由于S3不允许公共访问,它将给我
Access Denied
如果我使用
Storage::disk('s3')->get($this->path);
我可以从文件中下载数据,但是不知道该怎么处理。
编辑:它接缝了:
Storage::disk('local')->put(
'filename.txt',
Storage::disk('s3')->get('cloud-filename.txt'));
将S3文件复制到存储文件夹中。现在,我应该如何生成一个有效的链接?
答案 0 :(得分:3)
您是否尝试过生成临时网址?
// link will expire 5 hours from now.
$expires_at = now()->addHours(5);
Storage::disk('s3')->temporaryUrl($this->path, $expires_at);
对于第二个问题,我认为应该是相反的方式:
// retrieve file 'filename.txt' from local disk and put it on s3 disk as 'cloud-filename.txt'
Storage::disk('s3')->put(
'cloud-filename.txt',
Storage::disk('local')->get('filename.txt')
);