为了账号安全,请及时绑定邮箱和手机立即绑定

图像不会保存在公共文件夹 laravel 中

图像不会保存在公共文件夹 laravel 中

PHP
ABOUTYOU 2023-05-26 10:06:43
我正在学习 laravel 但我现在对图像有问题,我希望它保存在 storage/app/public/avatar 中以便我可以显示它,但它一直保存在 storage/app/avatar 中我在 .env 中写这个FILESYSTEM_DRIVER=public然后我生成存储链接php artisan storage:link 但还是一样,每次我上传照片时都会将其保存在 storage/app/avatar任何人都可以帮助我吗?在 filesystems.php 中'public' => [        'driver' => 'local',        'root' => storage_path('app/public'),        'url' => env('APP_URL').'/storage',        'visibility' => 'public',    ],这里 : $attributes['avatar'] = request('avatar')->store('public/avatars');在用户.phppublic function getAvatarAttribute($value){    return asset($value);}当我使用随机头像链接时,此方法工作正常,但现在它什么也没显示,我检查了我的数据库,链接就在那里,它是正确的public function getAvatarAttribute($value) {    asset('storage/avatars/'.$image->name); }$attributes['avatar'] = request('avatar')->store('public/avatars');在控制器中,更新方法:    $user->update($attributes);    $user->password = Hash::make($user['password']);    $user->save();    return redirect($user->path());在 show.blade 中 <img            src= "{{ $user->avatar }}"            alt=""            class="rounded-full mr-4 absolute"            style="width: 150px; left: calc(50% - 75px); top: 300px"        >但 src 变为“(未知)”
查看完整描述

4 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

将“FILESYSTEM_DRIVER=public”更改为

FILESYSTEM_DISK=public

或者完全删除该行并直接在 filesystems.php 中将 public 文件夹设置为默认磁盘,如下所示:

'default' => env('FILESYSTEM_DISK', 'public'),


查看完整回答
反对 回复 2023-05-26
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

这看起来更像是配置缓存问题,因为您的文件系统看起来配置正确。


文件storage/app夹是laravel默认磁盘(磁盘)的路径local。由于您已指定使用 public 作为 .env 中的默认磁盘,但您的应用程序仍在使用本地磁盘路径,因此看起来像是缓存问题


尝试使用


php artisan config:clear

然后尝试


request('avatar')->store('avatars');

如果确实是缓存问题,那么文件应该存储在storage/app/public文件夹中。


要获取图像的完整路径,请使用


Storage::url('avatar/'.$user->avatar);

所以在访问器中,使用


public function getAvatarAttribute($value)

{

    return Storage::url('avatar/'.$value);

}

不推荐使用asset()获取文件路径,因为如果有一天您希望将存储切换到云(S3 或任何其他存储。基本上,您不想使用应用程序的存储文件夹),那么将asset()不会不再给你正确的路径,你需要在任何地方改变它。但是当使用存储门面时,您需要做的就是在 filesystems.php 中更改它


另外,为了自己测试一下,你也可以通过将磁盘指定为存储方法的第二个参数来指定存储时的磁盘


request('avatar')->store('avatars', 'public');

Storage::disk('public')->url('avatar/'.$user->avatar);


查看完整回答
反对 回复 2023-05-26
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

另外,不要忘记删除public/storage文件夹

然后重新运行

php artisan config:clear

这个很重要

php artisan storage:link


查看完整回答
反对 回复 2023-05-26
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

另外,不要忘记删除public/storage文件夹

然后重新运行

php artisan config:clear

这个很重要

php artisan storage:link


查看完整回答
反对 回复 2023-05-26
  • 4 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信