前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过SCF回调COS上传对象信息到业务接口

通过SCF回调COS上传对象信息到业务接口

原创
作者头像
wainsun
修改2020-11-19 17:35:17
1.1K0
修改2020-11-19 17:35:17
举报

腾讯云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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档