详情页标题前

腾讯云云函数(SCF)SCF + API 网关处理多文件上传-云淘科技

详情页1

操作场景

通过腾讯云 Serverless 处理 multipart/form-data 多文件上传的 HTTP 请求,原理上需要利用 API 网关的 Base64 编码能力,将原始 HTTP 请求中的 multipart 字节流编码为字符串,以便将 HTTP Event 序列化,传入云函数 SCF 进行处理。云函数将 API 网关传来 event 中的 body 获取并解码 Base64 后,生成的字节流则与普通 HTTP 请求中的无异,正常处理即可。在 Node.JS 中,我们可以利用 busboy 等库进行处理。

操作步骤

步骤1:创建云函数

1. 登录 Serverless 控制台。2.函数服务页面,单击新建,创建一个 Node.js 云函数。
创建时,具体参数如下:

腾讯云云函数(SCF)SCF + API 网关处理多文件上传-云淘科技

3. 单击完成,完成云函数的创建。

步骤2:编写代码并部署

1. 云函数创建完成后,可以参考以下示例代码编写处理 multipart/form-data 的具体逻辑。

// handler.js"use strict";const stream = require("stream");const Busboy = require("busboy");
/** 处理用户上传 (POST) */const handlePost = (event) => { return new Promise((resolve, reject) => { const busboy = new Busboy({ headers: event.headers }); let html = ""; /** 接收到文件 */ busboy.on("file", (fieldname, file, filename, encoding, mimetype) => { let buf = Buffer.alloc(0); console.log({ fieldname }); /** 接收到文件的数据块,拼接出完整的 buffer */ file.on("data", function (data) { buf = Buffer.concat([buf, data]); }); /** 文件的数据块接收完毕,生成 DOM 字符串 */ file.on("end", function () { const imgBase64 = buf.toString("base64"); html += `腾讯云云函数(SCF)SCF + API 网关处理多文件上传-云淘科技`; }); }); /** multipart/form-data 接收完毕,构造并返回生成的 html */ busboy.on("finish", function () { console.log({ msg: "Parse form complete!", html }); resolve({ statusCode: 200, headers: { "content-type": "text/html", }, body: html, }); });
/** * busboy 需要 stream pipe 的方式来进行处理, * 我们将 body 解码为 buffer后, * 转换为 stream,最终 pipe 给 busbody */ const bodyBuf = Buffer.from(event.body, "base64"); var bufferStream = new stream.PassThrough(); bufferStream.end(bodyBuf); bufferStream.pipe(busboy); });};
/** 返回静态文件 */const handleGet = (event) => { const html = `

`; console.log({ msg: "Get form complete!", html }); return { statusCode: 200, headers: { "content-type": "text/html", }, body: html, };};
/** 云函数入口函数 */exports.main_handler = async (event, context) => { const method = event.httpMethod; /** 当请求为 POST 请求时,我们处理用户的 multipart/form-data,并生成展示上传结果的页面 */ if (method === "POST") { return handlePost(event); } /** 当请求为 GET 请求时,我们返回上传文件的页面 */ if (method === "GET") { return handleGet(event); }};

2. 编写代码后,您也可以为云函数安装运行时需要的依赖。例如,利用 busboy 进行 multipart/form-data 数据的解码。注意依赖要安装在 src 文件夹下。

腾讯云云函数(SCF)SCF + API 网关处理多文件上传-云淘科技


3. 单击部署,完成云函数的部署。

步骤3:绑定 API 网关触发器

在云函数的触发管理中,我们需要为云函数绑定 API 网关触发器,才能够处理用户具体的 HTTP 请求,具体的绑定方式和配置如下图:

腾讯云云函数(SCF)SCF + API 网关处理多文件上传-云淘科技


这个时候,如果访问 API 网关绑定的链接,会发现虽然静态页面能够工作,但是上传图片后,页面没有展示正确的结果。这是因为默认情况下,API 网关没有开启 base64 编码功能,multipart formdata 被错误编码为字符串传入 handler 函数,busboy 自然无法进行解码。因此,我们需要进入 API 网关,找到绑定的 API 服务,在其中的基础配置中打开 base64 编码。

腾讯云云函数(SCF)SCF + API 网关处理多文件上传-云淘科技


打开并发布服务后,我们的服务就可以正常工作了。

示例 Demo

您可访问腾讯云 Serverless 官方搭建好的 示例 Demo 来查看文件上传的效果。
官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/149880.html

(0)
上一篇 2023年12月9日 下午1:27
下一篇 2023年12月9日 下午1:27
详情页2

相关推荐

  • 腾讯云对象存储图像智能裁剪

    简介 本文档提供关于图像智能裁剪的相关 API 概览以及 SDK 示例代码。 API 操作描述 图像智能裁剪 腾讯云数据万象通过 AIImageCrop 接口对图像进行智能裁剪,支持持久化、云上处理及下载时处理。 SDK API 参考 SDK 所有接口的具体参数与方法说明,请参考 SDK API。 图像智能裁剪 功能说明 腾讯云数据万象通过 AIImag…

    腾讯云 2023年12月9日
  • 腾讯云TDSQL-C MySQL版手动备份

    TDSQL-C MySQL 版支持自动备份和手动备份两种方式来备份数据。本文为您介绍如何通过控制台创建手动备份。说明手动备份可选择快照备份对整个集群进行备份,也可以选择逻辑备份对整个集群或者特定的库/表进行备份。手动备份中的逻辑备份可在备份列表手动删除,释放掉备份空间,避免空间浪费和占用,快照备份不支持手动删除。手动备份中逻辑备份(整个集群)支持开启跨地域备…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储日志上报

    简介 本文档主要介绍 SDK 如何集成日志上报功能。注意: COS Android SDK 版本需要大于等于 v5.9.21。 功能说明 通过日志上报功能可以把 COS SDK 的运行日志上报到 CLS(腾讯云日志服务)上,用于查看分析 COS 各请求的执行次数、成功率、错误码以及国家省份等数据分布。 费用说明 COS SDK 的日志是上报并且存储在 CLS…

    2023年12月9日
  • 腾讯云内容分发网络CDN第三方教程

    本文提供了内容分发网络不同场景下的第三方教程,您可参考教程进行相关实践操作。说明由于内容分发网络产品在持续的更新与迭代,教程中的步骤由于时效性原因可能与产品最新的操作步骤不一致。第三方教程均来自 腾讯云开发者社区 ,仅供学习和参考。 文档入口 通用入门指导: 玩转腾讯云 CDN如何快速实现内容分发网络切换到腾讯云 CDN 个人建站: 使用腾讯云 CDN 加速…

    腾讯云 2023年12月9日
  • 腾讯云容器服务事件存储同尘科技

    操作场景 Kubernetes Events 包括 Kuberntes 集群的运行和各类资源调度情况,有助于维护人员日常观察资源的变更以及定位问题。TKE Serverless 集群支持为您的所有集群配置事件持久化功能,还支持使用腾讯云提供的 PAAS 服务和开源软件对事件流水进行检索。开启集群事件持久化后,TKE Serverless 集群会将您的集群事件…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。