PHP接收base64编码图片上传服务器并上传到七牛云

本文介绍了一种使用Base64编码上传图片的方法,并详细展示了如何在PHP中解析Base64编码的图片数据,将其转换为文件并上传至七牛云存储平台。文章提供了完整的代码实现,包括图片格式匹配、本地文件保存及云存储接口调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:
与安卓交互需要用到图片上传,由于PHP接收不到文件形式,所以转成base64编码上传;
实现:
首先在控制器中引入加上

		header('Content-type:text/html;charset=utf-8');
		vendor('Qiniu.autoload');
		use Qiniu\Auth as Auth;
		use Qiniu\Storage\UploadManager;

让安卓传两个参数,第一个参数“base64编码(看好编码前面必须是data:image/jpg;base64,开头的,不然上传失败)”,第二个参数:‘文件名不要后缀名’(这里根据自己的需要也可以不传文件名称,自己生成);

代码实现:

 public function files()
    {
        //得到文件对象
        $base64_image_content = $_POST['file'];
        $addName = $_POST['filename'];
        $str = '';
        $str = $this->upload($base64_image_content,$addName);
    
        if(!empty($str)){
            return json(
                array(
                    'code'=>200,
                    'msg'=>'上传成功',
                    'data'=>$str
                )
            );
        } else {
            return json(
                array(
                    'code'=>400,
                    'msg'=>'上传失败',
                )
            );
        }
    }

执行上传代码


    public function upload($base64_image_content,$addName)
    {
        //匹配出图片的格式
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
            $type = $result[2];
            $new_file = "./uploads/default/".date('Ymd',time());
            if(!file_exists($new_file))
            {
                //检查是否有该文件夹,如果没有就创建,并给予最高权限
                mkdir($new_file, 0777);
            }

            $new_file = $new_file.'/'.md5($addName).".{$type}";
            //print_r($new_file);die;
            //解码图片
            if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
                //调用七牛云上传
                $res = $this->qinius($new_file,md5($addName));
                if($res){
                    return $new_file;
                } else {
                    // 上传失败获取错误信息
                    $this->error('云上传失败,请重新上传');
                }
            }else{
                unlink($new_file);
                echo '保存失败';
            }
        }
    }

执行七牛云上传

	public function qinius($filePath,$filename)
    {
        //获取当前控制器名称
        //$controllerName = 'index';

        // 上传到七牛后保存的文件名
        $key = $filename;
        // 需要填写你的 Access Key 和 Secret Key
        $accessKey = '你自己的ak';
        $secretKey = '你自己的sk';
        // 构建鉴权对象
        $auth = new Auth($accessKey, $secretKey);
        //var_dump($auth);die;
        // 要上传的空间
        $bucket = '空间名;
        $domain = '七牛云空间域名';
        $token = $auth->uploadToken($bucket);
        // 初始化 UploadManager 对象并进行文件的上传
        $uploadMgr = new UploadManager();
        // 调用 UploadManager 的 putFile 方法进行文件的上传
        list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
        if ($err !== null) {
            echo ["err"=>1,"msg"=>$err,"data"=>""];
        } else {
            //返回图片的完整文件名称
            return $ret;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值