【问题标题】:Photo not loading using asset() in laravel 5照片未在 laravel 5 中使用资产()加载
【发布时间】:2018-01-11 17:57:20
【问题描述】:

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

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 命令静止图像不加载。

【问题讨论】:

  • 检查用户对公用文件夹的权限
  • 怎么做?
  • 你在 Linux 上吗?
  • 没有。我在 Windows 10 上
  • 你也做了存储和公共的链接吗?如果是这样,您可能只需要在路径名前添加 /storage。所以 www.url.com/storage/avatars/stuff.jpg

标签: php laravel laravel-5 storage


【解决方案1】:

来自the docs

默认情况下,公共磁盘使用本地驱动程序并将这些文件存储在storage/app/public中。要使它们可以从 Web 访问,您应该创建一个从 public/storagestorage/app/public 的符号链接

所以,运行这个命令来创建一个符号链接:

php artisan storage:link

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

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

【讨论】:

  • 我已经完成了,请检查我的问题的最后一行
  • 是的。我还使用了 php artisan storage:link 所以现在公共文件夹中也有一个快捷方式
  • @Raj 你的图片应该在storage/app/public/avatars/ 中,你应该和asset('storage/avatars/john.jpg')一起使用
【解决方案2】:

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

只存储数据库中图片的名称和图片文件夹中的文件。

当您查询用户个人资料时, 将图像名称存储到头像变量并使用刀片文件显示图像

<img src="{{ asset(Image/$profile->avatar) }}" width="20px" height="20px">

让它变得简单。

【讨论】:

  • 我在关注 laracast 的论坛教程系列,在那里我了解到图像名称可能会发生冲突,因此最好保存为哈希而不是提供文件名
  • 是的,可能会上传具有相同名称的图像。为此,您可以简单地将图像名称与一些随机变量或时间毫秒连接起来,然后再将名称保存到数据库中。它将向您保证每个图像名称都是唯一的。
猜你喜欢
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2022-01-03
  • 2018-11-23
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多