如何从 Laravel Vapor 中的 S3 检索文件

How to retrieve files from S3 in Laravel Vapor

在使用 Laravel Vapor 成功存储图像后,我在 html 中动态加载图像时遇到问题。

我已经按照 laravel vapor 提供的 this 文档来存储文件,它非常有用。我将上传的文件从 tmp 目录复制到我的 S3 存储桶的根目录中,然后将该文件的路径存储在我的数据库图像 table 中,以便稍后我可以 return 文件路径到我的前端并在我的浏览器中显示图像。

不幸的是,这总是 return 从 AWS S3 获取 403 状态代码。

我可以通过创建生成的 S3 存储桶 public 来解决这个问题,但这会引发安全问题。我相信这应该是开箱即用的,不知道我可能哪里出错了……有什么想法吗?

我正在使用 Storage facade return上传的图像 url。

use Illuminate\Support\Facades\Storage;    

return Storage::url($image->path);

其中 $image->path 是我的 S3 存储桶中的文件路径。

我确定存储外观工作正常,因为它return使用文件路径正确url。

我得到了这个问题的解决方案。我联系了 laravel vapor 支持,他们告诉我在将文件复制到永久位置时将文件的可见性 属性 设置为 public,如 Laravel 中所述官方文档 here.

因此,在使用 js vapor.store 方法上传文件后,您应该将其复制到永久目录,然后将其可见性设置为 public。

Storage::copy($request->path, str_replace('tmp/', '', $request->path));
Storage::setVisibility(str_replace('tmp/', '', $request->path), 'public');

我还注意到您可以直接在 vapor.store 方法中设置文件的可见性,方法是传递具有相应值的可见性属性。

vapor.store(file, { visibility: 'public-read' });

附带说明:'public' 将 return 400 错误请求,必须将其设置为 'public-read'。