在AWS S3上获取文件而不使用Laravel公开bucket

在AWS S3上获取文件而不使用Laravel公开bucket,laravel,amazon-web-services,amazon-s3,Laravel,Amazon Web Services,Amazon S3,我正在与Laravel一起处理S3文件 我的S3没有公共访问权限,但Laravel配置了一个AWS用户,该用户在S3上具有管理员权限 因此,我可以毫无问题地在S3中上传文件 我的问题来自于从那里获取文件 如果我使用: Storage::disk('s3')->url($this->path); 我将生成具有以下格式的链接: https://bucket.s3.region.amazonaws.com/path/filename.pdf 但由于S3上不允许公共访问,它会给我 Acc

我正在与Laravel一起处理S3文件

我的S3没有公共访问权限,但Laravel配置了一个AWS用户,该用户在S3上具有管理员权限

因此,我可以毫无问题地在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文件。现在,我应该如何生成工作链接?

您是否尝试过生成临时URL

//链接将在5小时后过期。
$expires_at=now()->addHours(5);
存储::磁盘('s3')->临时URL($this->path,$expires\u at);
关于你的第二个问题,我认为应该是相反的:

//从本地磁盘检索文件'filename.txt',并将其作为'cloud filename.txt'放在s3磁盘上
存储::磁盘('s3')->put(
“cloud filename.txt”,
存储::磁盘('local')->get('filename.txt')
);

我在文档中看到了临时URL,但没有意识到它是用于我的用例的。美好的谢谢你。我不需要第二个。