在laravel 5中使用asset()加载照片

时间:2018-01-11 17:57:21

标签: php laravel laravel-5 storage

我已经编写了存储和显示图像的代码

show.blade.php

     <form method="POST" action="{{ url('/user/'.$profile->user_id) }}" enctype="multipart/form-data">
    {{ csrf_field() }}

<input type="file" name="avatar" />
<input type="submit" value="Upload" />
  </form>
  <img src="{{ asset($profile->avatar_path) }}" width="20px" height="20px">

ProfileController.php

public function update(Request $request, Profile $profile)
    {
        $this->validate($request, [
            'avatar' => 'nullable|image',
        ]);

        $profile->fill([
                'avatar_path' => request()->file('avatar')->store('avatars', 'public'),
            ]);

        $profile->save();

        // auth()->user()->profile()->update([
        //     'avatar_path' => request()->file('avatar')->store('avatars', 'public')
        // ]);
    }

它将路径存储为avatars/XCK6azMSv87qA23YYXemZlPVoSKLN3sor9aUhfhQ.jpeg

当我检查storage/app/public图像实际存在avatars/文件夹

在控制台中显示

GET http://localhost:8000/avatars/XCK6azMSv87qA23YYXemZlPVoSKLN3sor9aUhfhQ.jpeg 404 (Not Found)

我还执行了php artisan storage:link命令静止图像无法加载。

3 个答案:

答案 0 :(得分:1)

来自the docs

  

默认情况下,公共磁盘使用本地驱动程序并将这些文件存储在storage/app/public中。要通过网络访问它们,您应创建从public/storagestorage/app/public

的符号链接

因此,运行此命令以创建符号链接:

php artisan storage:link

然后,您就可以使用asset()帮助程序在storage/app/public/avatars/john.jpg中显示图像:

{{ asset('storage/avatars/john.jpg') }}

答案 1 :(得分:0)

为什么不直接使用公用文件夹中资产图像文件夹的静态路径。 只需在应用程序的公共文件夹中创建一个名为Image的文件夹即可。

仅在数据库中存储图像的名称,并在Image文件夹中存储文件。

查询用户个人资料时  将图像名称存储为头像变量,并使用

在刀片文件中显示图像
<img src="{{ asset(Image/$profile->avatar) }}" width="20px" height="20px">

简化。

答案 2 :(得分:-3)

我找到了解决方案,你可以在avatar_path变量之前使用/ storage /

<img src="/storage/{{ $profile->avatar_path }}" width="50px" height="50px">