我遇到了Laravel和Storage类的问题。

我已经创建了一个上传表单,供用户控制其帐户中用作徽标的图像。我使用Laravel File Storage,灵感来自Flysystem

保存图像时,请按照以下步骤操作:

// Store the logo in the public filesystem, and define a 'public' visibility

$logo = $request->file('logo')->store('logos/'.$account->id, 'public');

// Save the path in the database

$account->update([
  'logo' => $logo
]);

上传效果很好,我可以在适当的文件结构下找到上传的图片:storage\app\public\logos\1\automatic-filename.jpeg
在我看来,我按如下方式检索图像网址:
<img src="{{ Storage::disk('public')->url($account->logo) }}" />

这给了我正确的路径:
http://www.example.com/storage/logos/1/automatic-filename.jpeg
但是,无论我尝试什么,图像上都会显示403

禁止
您无权访问此服务器上的/storage/logos/1/automatic-filename.jpeg。


我想我做的一切正确:
  • 我已使用php artisan storage:link创建了从public/storage到storage/app/public的符号链接(symbolic link)
  • 上传的文件以755权限保存在服务器上。所有相关文件夹都具有相同的权限。

  • 我真的不知道在哪里看...

    如果有人遇到类似问题,请提前感谢您的输入!

    最好的祝福,

    弗拉德

    最佳答案

    我猜想您遇到的这个403问题是在共享主机中放置的。使用php artisan storage:link创建符号链接(symbolic link)时,它包含storage/app/public文件夹的完整绝对路径。这可能是导致服务器响应403的原因。
    解决方案是从项目根目录创建具有相对路径的符号链接(symbolic link),例如

    ln -s ../storage/app/public public/storage
    
    这应该可以解决权限问题。
    编辑:我刚刚注意到有一个内置选项可以实现完全相同的功能:php artisan storage:link --relative

    07-24 09:49
    查看更多