技术饭

阿里云oss与腾讯云cos兼容,阿里云短信与腾讯云短信兼容

copylian    0 评论    809 浏览    2021.08.08

阿里云oss与腾讯云cos兼容,阿里云短信与腾讯云短信兼容,项目如果想从阿里云迁移到腾讯云或者从从腾讯云迁移到阿里云,那么必须保证之前的项目能跑通的前提现,再去做迁移,那么这时候需要做的工作就是做使用服务的兼容了,每个平台服务的api接口都不一致,但是也是类似的。


1、阿里云oss与腾讯云cos兼容,阿里云oss迁移到腾讯cos有直接的迁移任务很方便,亲测9个G用了2分钟左右


/**
 * [uploadFiles 文件上传处理函数]
function uploadFilesToOSS($type$saveDir = '')
{
    //设置保存目录
    $rootPath = "";
    if(!is_product()){
        $rootPath = "dev/";
    }
    if (!empty($saveDir)) {
        $movedir = $rootPath . 'uploads/' . $saveDir . '/' . date("Ymd");
    } else {
        $movedir = $rootPath . 'uploads/uploadfile/' . date("Ymd");
    }

    //设置验证
    $validate = [];
    if ($type == 'images') {
        $validate['ext'] = 'jpg,png,gif,bmp,jpeg';
    } else {
        $validate['ext'] = 'jpg,png,gif,bmp,zip,rar,psd,avi,mp4,mp3,wav,psd,swf,docx,xlsx,doc,xls,ppt,pptx,txt,xml,ai,swf,7z,mov,mpeg,wma,rtf,jpeg';
    }

    //开始上传处理
    $files = request()->file('Filedata');

    //初始化
    $my_accessKeyId = config('img.accessKeyId'); //"云 API 密钥 SecretId";
    $my_accessKeySecret = config('img.accessKeySecret'); //"云 API 密钥 SecretKey";
    $my_endpoint = config('img.endpoint'); //设置一个默认的存储桶地域
    $my_bucket = config('img.bucket'); //存储桶名称 格式:BucketName-APPID
    $my_domain = config('img.domain'); //域名地址

    //类型兼容处理
    if(config('app_storage_type') == 'cos'){
        //初始化
        $cosClient = new \Qcloud\Cos\Client(
            array(
                'region' => $my_endpoint,
                'schema' => 'https'//协议头部,默认为http
                'credentials'=> array(
                    'secretId'  => $my_accessKeyId,
                    'secretKey' => $my_accessKeySecret
                )
            )
        );

        ## Upload(高级上传接口,默认使用分块上传最大支持50T)
        ### 上传内存中的字符串
        ### 上传文件流
        try {    
            foreach ($files as $file) {
                //移动到框架应用根目录/public/uploads/ 目录下
                $info = $file->validate($validate)->rule('uploadFilesName');
                if ($info) {
                    $return['savename'] = $info->getSaveName();
                    $return['filename'] = $info->getFilename();
                    $return['pathname'] = $info->getPathName();
                    $return['domain'] = $my_domain;
                    $return['savepath'] = $movedir . "/";
                    $tmp_info = $info->getInfo();
                    $return['ext'] = substr(strrchr($tmp_info['name'], '.'), 1);
                    //设置文件名称
                    $saveName = create_order_sn(1'img') . "." . $return['ext'] ? : "jpg";
                    $object = $movedir . "/" . $saveName;
                    $file = fopen($return['pathname'], 'rb');
                    if ($file) {
                        $result = $cosClient->Upload(
                            $bucket = $my_bucket,
                            $key = $object,
                            $body = $file
                        );

                        $return['thumbpath'] = "/".$object;
                        return $return;
                    }
                }
            }
        } catch (\Exception $e) {
            return $e->getMessage();
        }
    } else {
        try {
            //加载自动加载文件
            require_once env('extend_path') . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
            $ossClient = new \OSS\OssClient($my_accessKeyId$my_accessKeySecret$my_endpoint);
            $position = 0;
            foreach ($files as $file) {
                //移动到框架应用根目录/public/uploads/ 目录下
                $info = $file->validate($validate)->rule('uploadFilesName');
                if ($info) {
                    $return['savename'] = $info->getSaveName();
                    $return['filename'] = $info->getFilename();
                    $return['pathname'] = $info->getPathName();
                    $return['domain'] = $my_domain;
                    $return['savepath'] = $movedir . "/";
                    $tmp_info = $info->getInfo();
                    $return['ext'] = substr(strrchr($tmp_info['name'], '.'), 1);
                    //设置文件名称
                    $saveName = create_order_sn(1'img') . "." . $return['ext']?:"jpg";
                    $object = $movedir . "/" . $saveName;
                    $position = $ossClient->appendFile($my_bucket$object$return['pathname'], $position);
                    if($position){
                        $return['thumbpath'] = "/".$object;
                        return $return;
                    }
                }
            }
        } catch(\OSS\Core\OssException $e) {
            return $e->getMessage();
        }
    }
}


2、阿里云短信与腾讯云短信兼容,腾讯云的短信参数与阿里云短信区别在于前者用的是{1}、{2}、{3},而阿里短信用的是${name}、${email},腾讯云必须按照顺序,一个索引数组一个是键值对数组,另外一个不同就是返回来存储处理文件的方式后缀不同,比如图片文件处理后缀:阿里云 - ?x-oss-process,腾讯云 - ?imageMogr2


/**
     * [TestTencentMsg 腾讯云短信测试]
     */
    public function TestTencentMsg(){

        //获取参数
        $params = $this->request->param();

        //发送成功短信
        $SignName = 'hdd';
        $TemplateCode = 'hdd_test_account_refuse';

        //设置参数内容
        $TemplateParam = getSmsTemplateParam(
            [
                'remark' => mb_substr($params['verify_remark'], 015)
            ]
        );

        //短息接口
        $sms = \sms\Sms::getInstance(
            getSmsChannel(), 
            [], 
            [
                'title' => '试用账号未通过审核',
                'mobile' => [$params['mobile']], 
                'smsdata' => [
                    'SignName' => $SignName
                    'TemplateCode' => $TemplateCode
                    'TemplateParam' => $TemplateParam //如果没有参数则设置空数组,如果不存在则是默认发验证码
                ], 
                'type' => 'test_account_refuse'
            ]
        );
        $sms->sendSms();
    }


/**
 * getSmsChannel 获取短信通道
 * @return boolean
 */
function getSmsChannel()
{
    //短信通道
    return config('user_sms_channel') ? config('user_sms_channel') : config('sms.default');
}

/**
 * getSmsTemplateParam 处理短信参数
 * @return boolean
 */
function getSmsTemplateParam($arr = [])
{
    //短信通道
    $sms_channel = config('user_sms_channel') ? config('user_sms_channel') : config('sms.default');

    //如果是腾讯云,参数必须是按照顺序排序,短信模板格式是{1},{2},{3};如果是阿里云按照参数名称即可
    if ($sms_channel == 'tencent') {
        $arr = array_values($arr);
    }

    //返回数据
    return $arr;
}


/**
 * getOssSuffix 获取oss后缀
 * @return boolean
 */
function getOssSuffix($width = 200$height = 200)
{
    //设置图片后缀
    if (config('app_storage_type') == 'cos') {
        $suffix = "?imageMogr2/crop/" . $width . "x" . $height . "/gravity/center";
    } else {
        $suffix = "?x-oss-process=image/resize,m_fill,h_" . $height . ",w_" . $width;
    }
    return $suffix;
}


飓风呀
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!

文明上网理性发言!

  • 还没有评论,沙发等你来抢