PHP接收base64編碼圖片上傳服務器並上傳到七牛雲

需求:
與安卓交互需要用到圖片上傳,由於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;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章