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

eyh26e7m  于 2023-09-29  发布在  PHP
关注(0)|答案(5)|浏览(145)

我正在学习laravel,但我现在的图像有问题,我希望它保存在存储/应用程序/公共/头像,所以我可以显示它,但它一直保存在存储/应用程序/头像
我在.env中写这个

FILESYSTEM_DRIVER=public

然后我生成存储链接

php artisan storage:link

但还是一样,每次我上传一张照片,它保存在存储/应用程序/头像
有人能帮我吗?
在filesystems.php

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

这里:

$attributes['avatar'] = request('avatar')->store('public/avatars');

在USer.php中

public 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());

在演出中blade

<img
            src= "{{ $user->avatar }}"
            alt=""
            class="rounded-full mr-4 absolute"
            style="width: 150px; left: calc(50% - 75px); top: 300px"
        >

但src变为“(未知)”

1hdlvixo

1hdlvixo1#

将“FILESYSTEM_DRIVER=public”更改为

FILESYSTEM_DISK=public

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

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

5t7ly7z52#

这看起来更像是一个配置缓存问题,因为您的文件系统看起来配置正确。
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中更改它。
另外,为了自己测试一下,还可以在存储时指定磁盘,方法是将磁盘指定为store方法的第二个参数

request('avatar')->store('avatars', 'public');
Storage::disk('public')->url('avatar/'.$user->avatar);
idv4meu8

idv4meu83#

另外,不要忘记删除public/storage文件夹
然后重新运行

php artisan config:clear

这很重要

php artisan storage:link
oewdyzsn

oewdyzsn4#

如果有人还在寻找答案。解决方法如下:

$attributes['avatar'] = request('avatar')->store('/avatars', public);
8wtpewkr

8wtpewkr5#

store方法将文件存储在storage/app目录下。这就是为什么您的代码将图像存储在storage/app/avatars

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

这将把它放在storage/app/public/avatars下

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

表现出来

asset('storage/avatars/`.$image->name)

相关问题