用 FunctionGraph 与 OBS 搭建无服务器图片处理服务

举报
yd_253349733 发表于 2026/10/09 18:55:13 2026/10/09
【摘要】 本文演示如何用华为云函数工作流 FunctionGraph 搭配对象存储 OBS,实现图片上传后自动压缩与生成缩略图,免运维、按调用计费,适合轻量图片处理场景。

一、为什么用无服务器做图片处理

图片上传后的压缩与缩略图生成,是很多应用都会遇到的需求。传统做法是常驻一台服务器跑处理程序:闲时资源浪费,高峰期又容易扛不住。用华为云函数工作流 FunctionGraph 配合 对象存储 OBS,可以做到“上传即处理”,按调用次数计费,闲置时零成本。

二、整体架构

用户上传图片到 OBS 源桶,OBS 产生对象创建事件后自动触发 FunctionGraph 函数,函数在运行时里用 Pillow 完成压缩与缩略图生成,再把结果写回目标桶。

三、准备工作

  1. 创建两个 OBS 桶:img-src(源)与 img-out(结果)。
  2. 在函数工作流控制台新建函数,运行时选择 Python 3.9。
  3. 为函数配置 OBS 触发器,并授予具备 OBS 读写权限的委托。

四、核心代码

def handler(event, context):
    rec = event["Records"][0]
    bucket = rec["s3"]["bucket"]["name"]
    key = rec["s3"]["object"]["key"]
    img = Image.open(io.BytesIO(get_object(bucket, key)))
    img.thumbnail((800, 800))
    buf = io.BytesIO()
    img.save(buf, "JPEG", quality=85)
    put_object("img-out", "thumb/" + key, buf.getvalue())
    return {"status": "ok"}

五、验证方式

向 img-src 上传一张 2MB 左右的照片,几秒后到 img-out/thumb/ 下即可看到压缩后的缩略图,说明链路打通。

六、小结

这套方案按实际调用计费,不需要维护服务器,非常适合个人博客、小程序后端这类轻量图片处理场景。如果业务访问量有明显的波峰波谷,无服务器方案在成本和弹性上都比较划算,值得一试。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。