Laravel,Image从存储显示中正确显示,但控制台返回状态代码404

时间:2016-11-26 17:33:10

标签: laravel-5.1

我遇到此问题时,来自存储的图片从页面中正确显示,但控制台显示状态代码404,如下图enter image description here所示

我注意到一些奇怪的事情......

此方法正常。

Route::get('/image/view','ImageController@display');

public function display(Request $request){
    $path = $request->path;
    $cacheimage = Image::cache(function($image)use($path){
        $file = Storage::disk('akl')->get($path);
        $ret = $image->make($file);

        return $ret;
    },10); // cache for 10 minutes

    return Response::make($cacheimage,200)->header('Content-Type','image/jpeg');
}

<img src="/image/view?path={{ $img1->path }}">

但是这种方法会出错。

Route::get('/photo/{params?}','ImageController@get')->where('params','.*');

public function get(Request $request){
    $url = $request->fullUrl();

    #   remove domain name & photo string
    $path = substr($url,strlen(url().'/photo'),strlen($url));

    #works fine
    $file = Storage::disk('akl')->get($path);
    return Response::make($file,200)->header('Content-Type','image/jpeg');
}

<img src="/photo{{ $img1->path }}">

3 个答案:

答案 0 :(得分:0)

即使是像这样简单的代码。

Route::get('/storage/{disk}/{params?}',function($disk,$params){
    $path = public_path('storage/') . $params;
    $file = \Intervention\Image\Facades\Image::make($path);
    return $file->response('jpg');
})->where('params','.*');

答案 1 :(得分:0)

发现自己是一个解决方案,虽然这不是我喜欢的方式......

Route::get('/storage/{disk}/{params?}/something',function($disk,$params){
    $path = public_path('storage/') . $params;
    $file = \Intervention\Image\Facades\Image::make($path);
    return $file->response('jpg');
})->where('params','.*');

所以网址看起来像这样...... http://domain.com/storage/disk/picture.jpg/something

如果有任何其他解决方案请与我分享.TQ!

答案 2 :(得分:0)

我也遇到了这个问题。在改变和测试laravel代码时浪费了很多时间。

问题在于网络服务器配置。在我的情况下nginx。检查您的Web服务器配置。我将以下位置块应用到我的nginx配置中后,再也没有404了。

    #protected resources to be handled by laravel
    location ^~ /storage {
        try_files $uri $uri/ /index.php$is_args$args;

        add_header        Cache-Control public;
        add_header        Cache-Control must-revalidate;
        expires           7d;
    }