在AWS S3上获取文件而无需使用Laravel公开存储桶

时间:2020-07-29 21:24:46

标签: laravel amazon-web-services amazon-s3

我正在使用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文件复制到存储文件夹中。现在,我应该如何生成一个有效的链接?

1 个答案:

答案 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')
);