当上传的图片时我们首先要验证图片的类型,如果时base64时就用下面这个进行判断,
function is_base64_encoded($data)
{
if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $data, $matches)) {
return TRUE;
} else {
return FALSE;
}
}
当上传的图片为其他的时候,判断是否为png,jpg等图片下面判断如下
/**
* 上传图片
* @param Request $request
* @return \think\response\Json
*/
public function uploadImage(Request $request)
{
$folder=$request->param('folder');//指定文件夹
$file=$request->file('file');
if(!$file) return json(['code'=>400,'msg'=>'请选择文件']);
if($folder){
$upload=$file->rule('month')->validate(array('ext'=>'jpg,png,jpeg,bmp,gif'))->move(UPLOAD_PATH.$folder);
}else{
$upload=$file->validate(array('ext'=>'jpg,png,jpeg,bmp,gif'))->move(UPLOAD_PATH);
}
if($upload){
$saveName=$upload->getSaveName();
$img=($folder ? ($folder.DS) : '').$saveName;
return json(['code'=>200,'data'=>$img]);
}else{
return json(['code'=>400,'msg'=>$upload->getError()]);
}
}
validate验证上传图片的类型
下面顺便讲一下对base64的处理
上传的base64处理
/*
* 生成图片
* */
function image($image)
{
$imageName = "20188_" . date("His", time()) . "_" . rand(1111, 9999) . '.png';
if (strstr($image, ",")) {
$image = explode(',', $image);
$image = $image[1];
}
$path = "./" . 'uploads/Ver/' . date("Ymd", time());
if (!is_dir($path)) { //判断目录是否存在 不存在就创建
mkdir($path, 0777, true);
}
$imageSrc = $path . "/" . $imageName; //图片名字
$r = file_put_contents($imageSrc, base64_decode($image));//返回的是字节数
if (!$r) {
return 1;
} else {
return $imageSrc;
}
}
还有一种情况:当提交后可以编辑时,base64就会出问题
1.第一次上传base64我将图片处理后保存到数据库,当第二次时,我会将数据库中的连接返回给前端(此时是链接)
这样就会出现问题,因为再次提交没有改变的图片其实是url链接,发送给我就会再次处理(对base64的处理),此时出错
解决方案: