PHP普通上传与base64图片上传到七牛云

421 阅读1分钟

一、普通上传到七牛云

    /**
     * @param $file      接收文件上传的值 这里的file是$_FILES获取的
     * @return \think\response\Json
     */
    public static function normal_upload($file){

        if(!$file){
            return ['msg'=>'文件不能为空', 'code'=>201, 'data'=>''];
        }
        require_once ROOT_PATH. 'vendor/qiniu/php-sdk/autoload.php'; //引入加载文件




        //本地的文件路径
        $localFilePath = $file['file']['tmp_name'];

        //截取文件后缀名
        //$suffix = '.jpg';
        $suffix = strtolower(substr($file['file']['name'],strpos($file['file']['name'],'.')));
   
        //生成一个唯一的文件名称,重命名 (md5加密原文件名+秒+随机数)
        $fileName = md5($file['file']['name']) . date('s',time()) . rand(1,9999999);
        $fileName .= $suffix;

        //上传七牛云业务逻辑
        $accessKey = config('site.qiniu_accesskey'); //去控制台的秘钥管理拿AK
        $secretKey = config('site.qiniu_secretkey');//去控制台的秘钥管理拿SK
        $auth = new Auth($accessKey, $secretKey);
        //七牛云桶名,根据自己实际进行填写
        $bucket = config('site.qiniu_bucket');
        // 生成上传Token
        $token = $auth->uploadToken($bucket);
        // 构建 UploadManager 对象
        $uploadMgr = new UploadManager();

        // 调用 UploadManager 的 putFile 方法进行文件的上传。
        list($ret, $err) = $uploadMgr->putFile($token, $fileName, $localFilePath);

        //错误信息提示
        if ($err != null) {
            //可调整为错误页面
            return ['msg'=>'上传失败', 'code'=>201, 'data'=>''];
        }

        //把七牛云图片路径存储到我们自己的数据库  七牛云图片路径
        $imageUrl = config('site.qiniu_domain'). $fileName;

        return ['msg'=>'上传成功', 'code'=>200, 'data'=>$imageUrl];
    }

二、将base64图片上传到七牛云

    /**
     * 上传base64位图片到七牛云
     * $image base64位图片流
     */
    public static function uploadPicBase64($image)
    {
        // 去除base64,
        $num = strpos($image,',');
        $image = substr($image, $num+1);
        $str= isset($image)?$image:false;

        //生成图片key
        // $rand = rand(111111,999999);
        $now = \customlibrary\Commom::doOrderSn('000');
        $name = 'pic/'.$now; //pic为存储空间的目录
        $Key = base64_encode($name);
        $accessKey = config('site.qiniu_accesskey'); //去控制台的秘钥管理拿AK
        $secretKey = config('site.qiniu_secretkey');//去控制台的秘钥管理拿SK
        $auth = new Auth($accessKey, $secretKey);
        //七牛云桶名,根据自己实际进行填写
        $bucket = config('site.qiniu_bucket');
        // 生成上传Token
        $upToken = $auth->uploadToken($bucket);
//        $upToken = $this->getToken();

        if($str)
        {
            $qiniu = self::phpCurlImg("http://upload-z2.qiniu.com/putb64/-1/key/".$Key,$str,$upToken);
            //upload.qiniup.com 上传域名适用于华东空间。华北空间使用 upload-z1.qiniu.com,华南空间使用 upload-z2.qiniu.com,北美空间使用 upload-na0.qiniu.com。

            $qiniuArr = json_decode($qiniu,true);

            if(!empty($qiniuArr['key'])&&$qiniuArr['key']==$name)
            {
                return config('site.qiniu_domain').$qiniuArr['key'];   //只会返回给你一个key,你需要将key和你的七牛云域名拼在一起就能访问
            }
            else
            {
                return false;
            }
        }
        return false;
    }

    //七牛base64上传方法
    public static function phpCurlImg($remote_server,$post_string,$upToken)
    {
        $headers = array();
        $headers[] = 'Content-Type:application/octet-stream';
        $headers[] = 'Authorization:UpToken '.$upToken;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$remote_server);
        curl_setopt($ch, CURLOPT_HTTPHEADER ,$headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }

注:这里你需要去七牛云安装第三方包

php composer.phar require qiniu/php-sdk

developer.qiniu.com/kodo/1241/p…

欢迎各位小伙伴来我的QQ交流群一起学习 :842167453