【问题标题】:How to display image using Laravel 5.8?如何使用 Laravel 5.8 显示图像?
【发布时间】:2019-06-23 17:09:08
【问题描述】:

我正在尝试显示存储在本地的图像。上传的文件在 Storage 文件夹中

我正在使用下面的代码来显示图像

@foreach($publications as $p)
    <div class="card" style="width: 18rem;">
        <img class="card-img-top" src="{{URL('public/storage/app/{$p->file_name}')}}" alt="{{$p->file_name}}" />
      <div class="card-body">
        <p class="card-text">{{$p->description}}</p>
      </div>
    </div>
@endforeach

但我得到了:

怎么了?

编辑 1

我用php artisan storage:link,控制台显示

The [public/storage] directory has been linked.

还是不行

【问题讨论】:

  • 也许您忘记将您的 storage/app/public 文件夹链接到 public 文件夹。尝试运行php artisan storage:link
  • @LeventeOtta 不工作但控制台显示The [public/storage] directory has been linked.
  • 您的public 文件夹看起来如何? (如果可能,添加屏幕截图)

标签: php laravel image laravel-5.8


【解决方案1】:

首先你需要做的

php artisan storage:link

这样您的 wepapp 无法访问的存储文件夹通常与您的公共链接 文件夹,以便您的应用可以访问图片,就像它们在公共文件夹中一样 但它会将它们存储在存储文件夹中,然后你应该像这样放置 smthg 来显示图像

我觉得会是这样的

    <img src="/storage/2/{{$p->file_name}}"/>

如果此路径不起作用,您可以在应用程序中编辑该路径的路径

希望对你有用

编辑我将与您分享我的代码中的一个示例 在迁移用户迁移

$table->string('image');

控制器

$imageName = time().'.'.request()->image->getClientOriginalExtension();
        request()->image->move(public_path('userpicture'), $imageName);
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'image' => $imageName,
            'password' => Hash::make($data['password']),
        ]);

请注意,我在这里使用的 create 方法仅在您将那些可填充的字段放入用户模型时才有效,所以没关系,您可以在存储数据部分使用任何您想要的东西,但集中在这三行

$imageName = time().'.'.request()->image->getClientOriginalExtension();
            request()->image->move(public_path('userpicture'), $imageName);

                'image' => $imageName,

如你所见,移动功能是将图片移动到公用文件夹并将其放入 userpicture 文件夹,然后最后一行将图像名称存储在数据库中,以便我以后可以访问它以显示图片

然后我可以简单地这样做来显示图片

<img class="img-responsive img-rounded" src="{{ asset('userpicture/1561335133.jpg') }}" alt="User picture">

【讨论】:

  • 我没有将文件存储在公共文件夹中,正如您在第一张图片中看到的那样。我应该存储在那个文件夹中吗?
  • 兄弟 laravel 中的 wepapp 没有访问存储等文件夹的权限,这就是为什么我们通常将存储链接到公共的原因,因为如果您希望图片可以访问,您应该直接将其放在公共或将其放入存储中,然后将其链接到公共,因为公共是 wepapp 可以访问并在您的代码中显示其文件的文件夹您错过了这一点,并始终记住 css 文件 .js 文件和图片应该是公共的或带有链接的存储对公众 v
  • 我和你分享了我两天前写的代码,它工作正常
【解决方案2】:

php artisan storage:link 创建指向/storage/app/public 的符号链接

但您的文件似乎在 /storage/app/files 中,请尝试将文件移动到公用文件夹。

您可以使用资产助手显示文件{{ asset("storage/{$p-&gt;file_name}") }}

【讨论】:

  • 不工作&lt;img class="card-img-top" src="{{ asset("storage/{$p-&gt;file_name}") }}" alt="{{$p-&gt;file_name}}" /&gt;
  • 如果你使用{{ asset("storage/2/filename.txt") }},文件应该位于/storage/app/public/2/filename.txt
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-28
  • 2019-11-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
相关资源
最近更新 更多