腾讯云COS在应用端实践中,由于是客户端直传至COS,对于业务服务器并未得到请求,也不知道客户端实际上传的内容,所以这里就需要通过上传COS后回调的方式来告知业务服务器。
云函数SCF就很好的能满足这个场景需求。
下面我们来做一个实践,看一下是怎么部署的。
1.我们需要先创建一个SCF实例,在SCF控制台,进入函数服务,选择指定地域,选择新建。
输入自己想要的函数名称
选择运行环境为Python2.7
模板可以选择helloword模板
2.创建函数实例后,输入准备好的执行代码到窗口内
完整代码信息如下
from qcloud_cos_v5 import CosConfig
from qcloud_cos_v5 import CosS3Client
from qcloud_cos_v5 import CosServiceError
from qcloud_cos_v5 import CosClientError
import sys
import logging
import urllib
import urllib2
logging.basicConfig(level=logging.INFO, stream=sys.stdout)
logger = logging.getLogger()
appid=[这里换成自己的appid] #appid
def main_handler(event, context):
logger.info("start main handler")
for record in event['Records']:
try:
#这里是通过COS事件,拆分客户端上传额请求信息
bucket = record['cos']['cosBucket']['name'] + '-' + str(appid)
key = record['cos']['cosObject']['key']
key = key.replace('/' + str(appid) + '/' + record['cos']['cosBucket']['name'] + '/', '', 1)
logger.info("Key is " + key)
try:
#这里是请求业务服务器的内容
objectname = urllib.quote_plus(key)
url = "http://[业务服务器IP或域名]/?objectname="+objectname #应用服务器接口地址
res_data = urllib2.urlopen(url)
res = res_data.read()
print url
except CosServiceError as e:
print(e.get_error_code())
print(e.get_error_msg())
print(e.get_resource_location())
return "Fail"
logger.info("callback server [%s] Success" % key)
except Exception as e:
print(e)
print('Error callback server {} from bucket {}. '.format(key, bucket))
raise e
return "Fail"
return "Success"
3.创建触发器
触发版本根据需求选择,可以选择默认流量
出发方式选择COS触发
bucket为业务bucket
事件类型可以选择全部创建或根据所需行为单独选择。
创建完成后,可以在COS控制台上传文件测试一下。
正常可以得到下面的结果
我们这里做了一个日志输出,会输出三行
上传的对象完整路径:Key is dir/b6ba7a90a820a5d1cadc526fdbd9b35c.jpg
回调业务服务器的请求信息:http://152.136.XXX.XX/?objectname=dir%2Fb6ba7a90a820a5d1cadc526fdbd9b35c.jpg
回调业务服务器的返回值:callback server [dir/b6ba7a90a820a5d1cadc526fdbd9b35c.jpg] Success
这样,通过SCF轻应用实现的业务回调功能就完成了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。