前两天团队开发项目写了一个自己上传显示图片的接口相关代码如下
控制器:
class PictureUpdateController extends Controller
{
//输出图片
public function showPicture($name)
{
$path = storage_path('/uploads/' . $name);
if (is_file($path)) {
return response()->file($path);
} else {
return response()->fail(100, '图片输出失败!', null);
}
}
//上传图片
public function updatePicture(PictureRequest $request){
$picture = $request->file('picture');
if($picture->isValid()){
//获取扩展名
$extend=$picture->getClientOriginalExtension();
//获取文件路径
$path = $picture->getRealPath();
//取名
$name = uniqid().time().'.'.$extend;
$stat = Storage::disk('admin')->put($name,file_get_contents($path));
if($stat){
return response()->success(100,'添加成功!',$name);
}
else{
return response()->fail(200,'添加失败,请重试!',null);
}
}
}
}
相关的路由:
//更新图片
Route::post('/picture/updatepicture','Picture\PictureUpdateController@updatePicture');
//输出图片
Route::GET('/picture/showpicture/{name}','Picture\PictureUpdateController@showPicture');
filesystems.php相关配置:
这个图片上传方法虽然也是用到Laravel自带的Storage,但是我们在访问的时候却可以不用建立软连接,而且我们可以更好的将我们的图片不暴露在public下面,这也是为什么我写这个方法的原因。
但是当我将我的方法上传到github的团队项目中后,整合人员将代码拉下来运行显示图片接口的时候却出现了如下状况:
浏览器状态显示200,所有的图片信息都获取到了,但是图片就是不显示,网页一片黑中间就显示一个小白框。
经过自己的不断尝试和测试,最后才发现,其实问题的所在原来是github的一个转码问题。
当时经过团队成员的一起测试,才发现,原来我们从git上拉下来的代码存在一个编码问题,他的web.php文件的编码是UTF-8 DOM 和我们往常所见的UTF-8有所不同,具体的区别大家可以去搜索下。
这里主要是阐述自己的解决方法,我是将下载下来的路由内容copy一份,然后将另一个新创的项目的路由文件(web.php)替换从git上拉下来的web.php,代码内容可以粘贴上就好。这样就能解决啦!
当然,他们也提议说好像是git自带了一个可以选择下载解码方式的东西,大家有兴趣可以去了解下。
大家还遇到过Laravel其他什么问题,欢迎相互交流。