小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
需求
本次需求需要从cos拉文件 在 服务器端压缩好后上传到另一个cos中
概念
云api
cloud.tencent.com/document/pr… 通过云 API,您只需少量代码即可快速操作云产品。为方便您快速轻松调用云 API 来管理腾讯云资源,云 API 提供了 API Explorer、腾讯云命令行工具 TCCLI、SDK、云 API 平台及 API Inspector 工具。
腾讯云开发者工具套件(SDK)3.0
cloud.tencent.com/document/sd… 目前已经支持 CVM、VPC、CBS 等产品,后续所有的云服务产品都会陆续接入。新版 SDK 实现了统一化,具有各个语言版本的 SDK 使用方法相同,接口调用方式相同,错误码相同以及返回包格式相同等优点。
SDK for 云函数
cloud.tencent.com/document/ap…
流程思路
过程
1,进入 serverless.cloud.tencent.com/start?c=scf
使用官方demo 创建云函数
配置云函数
选择 zip 文件压缩 进行部署 其中node 12.16
创建云函数完成后,你会得到
2,添加触发器
选择新建一个api服务
3,访问触发器地址
参数为
{
"secretId": "你的secretId"
"secretKey": "你的secretKey"
"bucket": "nod69424",
"region": "aphou",
"key": "zip-test0907.zip",
"sourceList": [
{"url": "http://node-zip-1255469424.cos.ap-guangzhou.myqcloud.com/cos/WechatIMG56%E7%9A%84%E5%89%AF%E6%9C%AC%202.jpeg"}
]
}
报错为:
"errno": 403,
"error": "requestId 74ededec75838b55856b0d204d545c3a , Invalid scf response format. please check your scf response format."
查看文档 cloud.tencent.com/document/pr…
然demo中是直接返回的对象
所以我们添加一个方法
const asReJson = (data,state = 200)=>{
const promise = new Promise(function(resolve, reject) {
resolve({
"isBase64Encoded": false,
"statusCode": state,
"headers": {"Content-Type": "application/json"},
"body": JSON.stringify(data)
})
})
return promise
}
调用该方法
return asReJson({
code: 0,
message: 'cos zip file success',
data: {
Location,
Bucket,
Key,
ETag,
},
},200)
即可正常返回
{
"code": 0,
"message": "cos zip file success",
"data": {
"Location": "node-zip-.cos.ap-guangzhou.myqcloud.com/zip-test0907.zip",
"Bucket": "node-zip-",
"Key": "zip-test0907.zip",
"ETag": "\"761b3110e232f1a2bf7a9eecda5ee6d4-3\""
}
}
如图 (如图 响应raw json 格式)
缺点
1, 响应时间 由于云函数有响应时间 1-900 秒的限制
所以如果是多而大,时间过长就会压缩失败,比较适合短小的任务