【问题标题】:Laravel image not shown on server and working fine on my local machineLaravel 图像未显示在服务器上并且在我的本地机器上工作正常
【发布时间】:2017-08-14 18:14:07
【问题描述】:

在我的本地机器项目工作文件上,但是当我上传到我的服务器上时,所有图像都没有显示,并且当我点击浏览器的完整图像路径时出现 NotFoundHttpException 错误。

我的项目路径是

/public_html/offlinemall/public 

下面是我的 filesystems.php

'disks' => [

    'local' => [
        'driver' => 'local',
        'root' => storage_path('app'),
    ],

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

    's3' => [
        'driver' => 's3',
        'key' => env('AWS_KEY'),
        'secret' => env('AWS_SECRET'),
        'region' => env('AWS_REGION'),
        'bucket' => env('AWS_BUCKET'),
    ],
    'featured' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

],

以及我如何获得图像

<img style="height: 480px" src="storage/{{ $ad->avatar }}">

在检查中,我得到完整路径,但是当我点击 url 时,我得到 NotFoundHttpException 错误。

http://compare.theofflinemall.com/storage/featured_image/qzHWpQeSfKjZ6DOS59ROyYboJ1GCvVi6NNVfLtVV.jpeg

【问题讨论】:

  • public/storage 中有文件夹吗?如果不在/public 中,则不能公开访问,必须通过控制器访问。
  • @aynber 我通过 php artisan storage:link 命令创建了一个从 public/storage 到 storage/app/public 的符号链接
  • 检查您的公用文件夹是否有由 php artisan storage:link 命令生成的存储链接?
  • @MizanurRahmanKhan 是的存储链接在公共文件夹中可用。
  • 通过单击公共存储链接,您可能知道它是否连接正确。单击存储链接后,如果它会转到存储链接,则可以。如果没有,那么您需要再次生成存储链接。你可以使用像 Storage::url($ad->avatar); 这样的文件

标签: php laravel laravel-5.4


【解决方案1】:

您的服务器无法将storage 定位为路径,因为它使用public_path 运行

php artisan storage:link

它应该工作。另外,尝试使用

{{ asset('storage/'.$ad->avatar) }}

【讨论】:

  • 不工作。我在本地尝试过并且在那里工作正常,但在我的服务器上同样的错误。
【解决方案2】:

基本上它有象征性的问题。可能您已经使用存储目录来存储图像。如果您使用它,您需要通过php artisan storage:link 创建一个符号链接。它使用存储名称在本地项目的公共目录中创建一个符号目录。当您在服务器上上传项目时,符号目录不会与您的项目一起上传。因此,合理地浏览器不会获取路径并且不会显示图像。从这些角度来看,有很多解决方案:

解决方案 1: ssh 密钥访问,如果您有服务器的 ssh 密钥访问权限,请使用 ssh 密钥登录到您的服务器,进入您的项目目录并运行命令 php artisan storage:link 它将创建项目的符号目录。

解决方案 2: 通过在服务器上创建 cron 作业。

解决方案3:通过执行php脚本创建符号链接。请通过此链接cron job and php file execution

解决方案4:通过更改config/filesystem.php中图片路径的根目录。请通过这个网址laracast.com

【讨论】:

    【解决方案3】:

    您可以将图像标签更改为:

    1. &lt;img src={{ asset('storage/'.$ad-&gt;avatar) }} /&gt;
    2. &lt;img src="storage/app/public/{{$ad-&gt;avatar) }}" /&gt;
    3. &lt;img src="&lt;?php echo asset("storage/app/public/$ad-&gt;avatar")?&gt;"&gt;&lt;/img&gt;

    【讨论】:

    • @M Idrees 我将项目路径提供给 /public_html/offlinemall/public,因此我无法从公共返回。
    • 没有必要从public返回。
    猜你喜欢
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 2018-03-07
    相关资源
    最近更新 更多