技术饭
阿里云oss与腾讯云cos兼容,阿里云短信与腾讯云短信兼容
copylian
0 评论
10861 浏览
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 {
//加载自动加载文件
$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'], 0, 15)
]
);
//短息接口
$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;
}
感谢你的支持,我会继续努力!
扫码打赏,感谢您的支持!
文明上网理性发言!