【问题标题】:How to retrieve files from S3 in Laravel Vapor如何在 Laravel Vapor 中从 S3 检索文件
【发布时间】:2020-01-06 12:46:17
【问题描述】:

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

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

不幸的是,这总是从 AWS S3 返回 403 状态代码。

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

我正在使用 Storage 门面返回上传的图片 url。

use Illuminate\Support\Facades\Storage;    

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

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

我确信存储门面工作正常,因为它返回了带有文件路径的正确 url。

【问题讨论】:

    标签: laravel amazon-s3 laravel-vapor


    【解决方案1】:

    我找到了解决这个问题的方法。我联系了 laravel vapor 支持,并被告知在我将文件复制到永久位置时将其可见性属性设置为公开,如 Laravel 的官方文档 here 中所述。

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

    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' 将返回 400 错误请求,它必须设置为 'public-read'。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-07
      • 2018-10-27
      • 2021-11-02
      • 1970-01-01
      • 2017-08-13
      • 2021-05-09
      • 2021-01-15
      • 2021-02-27
      相关资源
      最近更新 更多