thinkphp将base64格式图片存储到本地

本文介绍如何使用ThinkPHP框架将接收到的Base64格式图片转换并存储到本地服务器,包括调用端和存储端的代码实现。

1、调用端代码:

$fadan_img=$post['fadan_img'];
		$fadan_str='';
		if(is_array($fadan_img)){
			foreach($fadan_img as $key=>$value){
				$saveimg_result=$this->base64_upload($value,$uid);
				if($saveimg_result['code']==1){
					if($key==0){
						$coverimg=$saveimg_result['id'];
					}
					$fadan_str.=$saveimg_result['id'].',';
				}else{
					return json($saveimg_result);
				}
			}
		}else{
			$saveimg_result=$this->base64_upload($fadan_img,$uid);
			if($saveimg_result['code']==1){
				$coverimg=$saveimg_result['id'];
				$fadan_str.=$saveimg_result['id'].',';
			}else{
				return json($saveimg_result);
			}
		}

2、base64存储端代码

/**
	 * 封装base64图片上传
	 * @return array('id'=>'在attachment表中的id','src'=>'图片地址')
	 */
	protected function base64_upload($base64,$userid=0) {
        if(Db::name('user')->where('id',$userid)->find()==false){
        	$rdata['msg']='提交失败:' .'用户信息错误';
        	$rdata['code']=0;
            return $rdata;
        }
	    //post的数据里面,加号会被替换为空格,需要重新替换回来,如果不是post的数据,则注释掉这一行
	    $base64_image = str_replace(' ', '+', $base64);
	    $img_len = strlen($base64_image);
		$file_size = $img_len - ($img_len/8)*2;
	    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result)){
	        //匹配成功
	        if($result[2] == 'jpeg'){
	            $image_name = uniqid().'.jpg';
	            //纯粹是看jpeg不爽才替换的
	        }else{
	            $image_name = uniqid().'.'.$result[2];
	        }
	        $module='api';
	        $use='api_applet';
	        $image_file = DS. 'uploads' . DS . $module .DS.$use.DS.date('Ymd');
	        $image_file_hasroot=ROOT_PATH.'public'.$image_file;
	        if(!file_exists($image_file_hasroot)&&!mkdir($image_file_hasroot,0777,true)){
	        	return array('code'=>0,'msg'=>'创建文件夹失败');
	        }
	        $image_file_hasroot.=DS.$image_name;
	        //服务器文件存储路径
	        if (file_put_contents($image_file_hasroot, base64_decode(str_replace($result[1], '', $base64_image)))){

				$img_len = strlen($base64_image);
				$file_size = $img_len - ($img_len/8)*2;
	        	//写入到附件表
	            $data = [];
	            $data['module'] = $module;
	            $data['filename'] = $image_name;//文件名
	            $data['filepath'] =  $image_file.DS.$image_name;//文件路径
	            $data['fileext'] = $result[2];//文件后缀
	            $data['create_time'] = time();//时间
	            $data['uploadip'] = $this->request->ip();//IP
	            $data['user_id'] = $userid;
	            $data['use'] = '小程序';//用处
	            $data['admin_id']=1;
	            $data['status']=1;
	            $data['audit_time']=time();
	            $data['filesize']=$file_size;
	            $res['id'] = Db::name('attachment')->insertGetId($data);
	            // $res['src'] =  $image_file.DS.$image_name;
	            // $res['src'] = str_replace("\\", "/", $res['src']);
	            $res['code']=1;
	            $res['msg']='上传成功';
	            return $res;
	        }else{
	            return array('code'=>0,'msg'=>'上传失败');
	        }
	    }else{
	        return array('code'=>0,'msg'=>'上传失败,只能上传图片');
	    }
	}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值