在lumen中预览图片有一个坑,laravel中大家都知道,显示图片和文件可以借鉴文件响应那一块。
file 方法可用于直接在用户浏览器显示文件,例如图片或 PDF,而不需要下载,该方法接收文件路径作为第一个参数,头信息数组作为第二个参 数:
return response()->file($pathToFile);return response()->file($pathToFile, $headers);
而在lumen5.6的文档中是没有response()->file()的,那怎么才能显示图片呢。可能大家知道建立软连接,在laravel工程根目录
执行命令:php artisan storage:link
也就是在根目录的public文件夹下建一个stotage文件夹,你手动自己建也可以,因为这个文件夹是laravel&&lumen中唯一面向公众的,知道链接后谁可以直接访问。同时问题也来了,这种方式的安全问题令人深思。
首先我要显示的是在数据库中存储的图片,在数据库中存储的图片其实只是一个带后缀的图片名称。
比如这样:
首先在控制器中:
public function getResultImage($id){$image = ResultModel::find($id);if (!$image){return '暂无资源';}$name = $image->thumb;//图片所在路径$dir = storage_path('app/public/image/');$header = ['Content-Type'=>'image/jpeg'];//array('Content-Type'=>'text/image');$content = file_get_contents($dir.$name);return response()->make($content, 200, $header);// return redirect('storage/uploads/'.$name);}
然后在路由中定义,
//查看图片 Route::get('getResultImage/{id}',['as'=>'projectV.image.get','uses'=>'V1\ResultController@getResultImage' ]);
时间紧凑,不懂得可以问我,一起交流。