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

使用Laravel Vapor成功存储图像后,我无法在HTML中动态加载图像。

我遵循了laravel vapor提供的this文档来存储文件,它的工作原理就像是一种魅力。我将上传的文件从tmp目录复制到S3存储桶的根目录中,然后将该文件的路径存储在数据库图像表中,以便以后可以将文件路径返回到前端并在浏览器中显示该图像。

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

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

我正在使用Storage Facade返回上传的图像URL。

use Illuminate\Support\Facades\Storage;    

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

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

我确定存储外观能够正常工作,因为它返回了带有文件路径的正确URL。

zhoulang914 回答:如何在Laravel Vapor中从S3检索文件

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

因此,使用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”将返回400错误请求,必须将其设置为“ public-read”。

本文链接:https://www.f2er.com/2815460.html

大家都在问