我遇到了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)我真的不知道在哪里看...
如果有人遇到类似问题,请提前感谢您的输入!
最好的祝福,
弗拉德
最佳答案
我猜想您遇到的这个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
。