我遇到此问题时,来自存储的图片从页面中正确显示,但控制台显示状态代码404,如下图所示
我注意到一些奇怪的事情......
此方法正常。
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 }}">
答案 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;
}