Php Laravel不在生产服务器上显示图像

Php Laravel不在生产服务器上显示图像,php,image,laravel,laravel-5,Php,Image,Laravel,Laravel 5,我的生产服务器是ubuntu 16.04.3 LTS,我有laravel 5.5 在路线上: /var/www/forumb 我的公用文件夹位于以下目录中: /var/www/forumb/public 用户上传图像,这些图像保存在: /var/www/forumb/public/uploads/images “图像”文件夹具有777个权限 在“图像”文件夹中,有使用封面的图像 这些都是从视图中正常显示的 问题是,从视图中看不到上载用户的图像,并且这些图像位于相同的文件夹图像中 我可以直接从浏览

我的生产服务器是ubuntu 16.04.3 LTS,我有laravel 5.5 在路线上:

/var/www/forumb

我的公用文件夹位于以下目录中:

/var/www/forumb/public

用户上传图像,这些图像保存在:

/var/www/forumb/public/uploads/images

“图像”文件夹具有777个权限 在“图像”文件夹中,有使用封面的图像 这些都是从视图中正常显示的

问题是,从视图中看不到上载用户的图像,并且这些图像位于相同的文件夹图像中

我可以直接从浏览器中看到的封面图像如下:

用户图像

但这些都看不到,laravel返回404错误

从视图中可以看到的唯一图像是与框架一起出现的图像以及位于“图像”文件夹中的图像

在我从filezilla上传一个图像到服务器之前,其他所有的图像都看不到,但也看不到

这只发生在生产服务器上,在我的本地主机上,一切正常

这是视图中的mi代码

<img class="card-img-top border-bot" src="{{ !is_null(user()->image) ? $profile_image : '/uploads/images/facebook-default-no-profile-pic.jpg' }}" class="img-fluid rounded mx-auto d-block" alt="{!! user()->nombre_empresa !!}">
profile_image()函数


图像正常上载但不显示

将上载的文件保存到磁盘时,Laravel会将文件放入
存储/app/public
而不是
public
。因此,您需要创建一个符号链接,以便从web访问这些文件

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

要创建符号链接,可以使用
storage:link
Artisan命令:


我也受这个问题的困扰。在我的本地主机上,我可以上传和查看图像。在服务器上,我可以上传图像,但无法在浏览器上查看图像,尽管我可以在公共/存储中看到图像。后来我发现我把图像指错了。我希望对我有用的东西对你有用。这就是我所做的

  • 将项目上载到服务器。在我的情况下是这样的

    |-www
    |--laravelProject

  • 运行
    $php artisan storage:link
    或运行此脚本

    $exitCode=Artisan::call('storage:link',[]);
    echo$exitCode;//0退出代码,无错误。

  • 我上传我的图片

    $file = Storage::putFile('images', $request->file('my_image'));
    $baseUrl = url('/');
    $imagePath = $baseUrl.'/laravelProject/public/storage/'.$file;
    $input['image_path'] = $imagePath;
    $input['image_root'] = $file; //used when deleting
    MobileSlider::create($input);
    
  • 我确认我的图像在

  • www/laravelProject/public/storage/images

    你的可能是

    public\u html/laravelProject/public/storage/images

  • 在我的浏览器上访问图像

  • 我不确定这是不是最好的方法,但它对我很有效。

    在回答您的问题时,@Alexey Mezenin解释了您在制作中没有看到图像的原因

    简而言之,在laravel中,您必须使用命令创建指向公用文件夹中存储文件夹的链接,然后才能看到图像

    但是生产中的问题是我们不能直接运行命令,但是我们可以通过编程来运行它

    因此,编辑您的
    routes/web.php
    文件并添加以下行:

    Route::get('/any-route', function () {
      Artisan::call('storage:link');
    });
    
    imp注意:请记住,如果您在本地运行了该命令,则存储文件夹已存在于公用文件夹中,因此首先必须删除
    公用/存储
    文件夹


    然后,您可以运行指定的路由
    /上述路由文件中所述的任何路由

    请发布处理上载的控制器功能。您是否可以通过查看主机中的文件系统来验证文件的最终位置?您确定要将图像保存在
    public/uploads/images
    中,而不是存储文件夹中的某个位置吗?如果我确定,因为我可以从终端上看到用户上载的文件在图像文件夹中显示您的
    使用情况。您是否尝试将相对路径替换为绝对路径为
    资产
    帮助器?我已经尝试过了但是我又试了一次,我发现“public/storage”目录已经存在了。你有没有发现任何错误?我很确定这个解决方案是有效的。不,我没有任何错误消息,只显示了一个白框。在上载图像或试图显示图像时,您是否看到了一个白框?Laravel为图像生成了什么?请显示您用于存储图像的代码。在用户图像应该显示的位置会显示一个白色框。这很奇怪,我不认为这是代码,因为我使用的是Adminlte模板,但无论如何我都会上传代码
    php artisan storage:link
    
    $file = Storage::putFile('images', $request->file('my_image'));
    $baseUrl = url('/');
    $imagePath = $baseUrl.'/laravelProject/public/storage/'.$file;
    $input['image_path'] = $imagePath;
    $input['image_root'] = $file; //used when deleting
    MobileSlider::create($input);
    
    Route::get('/any-route', function () {
      Artisan::call('storage:link');
    });