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'=>'上传失败,只能上传图片');
}
}
本文介绍如何使用ThinkPHP框架将接收到的Base64格式图片转换并存储到本地服务器,包括调用端和存储端的代码实现。

2342

被折叠的 条评论
为什么被折叠?



