显示在laravel存储/应用程序/受保护/图像中存储的图像,但返回404

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显示在laravel存储/应用程序/受保护/图像中存储的图像,但返回404相关的知识,希望对你有一定的参考价值。

该应用程序将图像存储在Laravel 7上的storage / app / protected / images目录中的各个目录中。我可以在本地主机上显示从这些目录中检索到的图像,但是没有问题,但是当我移到暂存台时,我注意到每个即使图像显示在浏览器中,请求也会返回404。

我已经检查了后端,并且后端中的所有图像(管理员)都存在相同的问题。

图像URL结构很简单:example.com/images/slider/image-name.png

这里是我的ImageViewController

namespace AppHttpControllersClient;

    use AppExceptionsErrorPageException;
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateSupportFacadesStorage;

    class ImageViewController extends Controller
    {
        public function getMainImage($name)
        {
            if(file_exists(storage_path('app/protected').'/images/'.$name)){
                $image = storage_path('app/protected').'/images/'.$name;
            }else{
                throw new ErrorPageException(404);
            }
            return response()->file($image);
        }

        public function getImage($type, $name)
        {
            if(file_exists(storage_path('app/protected').'/images/'.$type.'/'.$name)){
                $image = storage_path('app/protected').'/images/'.$type.'/'.$name;
            }else{
                throw new ErrorPageException(404);
            }
            return response()->file($image);
        }

    }

这里是我的路线:

Route::get('images/{name}', 'ClientImageViewController@getMainImage');

Route::get('images/{type}/{name}', 'ClientImageViewController@getImage');

我似乎无法自行解决问题。

请帮助!

答案

已解决!

该问题在包含nginx静态文件缓存指令之后出现。

我已经改变了方法,现在一切正常!

这里他们适合我的情况下的任何人:

# browser caching of static assets
    location ~ /.(jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
        expires 30d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }

    # CSS and javascript
    location ~* .(?:css|js)$ {
      expires 1y;
      access_log off;
      add_header Cache-Control "public";
    }

所有这些代码都在server { ... }内部

以上是关于显示在laravel存储/应用程序/受保护/图像中存储的图像,但返回404的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5 中保护图像不被公众看到?

如何在 Laravel 5 中保护图像不被公众看到?

如何在没有 Laravel 尝试将其保存到数据库的情况下在 Eloquent 模型中使用受保护的属性

如何在 nuxtjs 中显示来自存储(Laravel)的图像

如何以及在哪里可以用laravel存储图像?

Laravel - 在视图中显示我的数组图像,这些图像存储在我的数据库中的一行中