zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

iapp对接云函数上传图片

2023-03-20 14:50:05 时间

iapp上传图片到腾讯云函数

原理

原理:使用iapp对图片进行Base64编码然后上传到腾讯云API网关触发云函数事件

iapp对图片进行base64处理

原理:使用httpbin.org对图片数据进行处理

iapp事件代码

t()
{
  s api = "http://httpbin.org/post"
  // 因为huf函数使用post请求所以要使用httpbin post链接
  s file = "/storage/emulated/0/Pictures/WeiXin/1.jpg"
  // 图片本地地址 如无法上传 使用%代替/storage/emulated/0/
  s type = "utf-8"
  // 编码
  huf(api, "" , file, type, e)
  syso(e)
}

返回结果

{
    "args": {},
    "data": "",
    "files": {
        "file": "data:image/jpeg;base64,图片数据"
    },
    "form": {},
    "headers": {
        "Accept-Encoding": "gzip",
        "Charset": "utf-8",
        "Content-Length": "121",
        "Content-Type": "multipart/form-data;boundary=******",
        "Host": "httpbin.org",
        "User-Agent": "",
        "X-Amzn-Trace-Id": "Root=1-6191e183-110116c866c95ea842fa6c2a"
    },
    "json": null,
    "origin": "IP地址",
    "url": "http://httpbin.org/post"
}

云函数接收数据

进入控制台新建云函数

选择python3.6

创建API网关触发

注意要不要勾选集成响应 否则下面的代码运行后会显示错误

云函数Python处理图片代码

这里的return没有使用集成响应的格式,如果勾选了集成响应会显示错误,集成响应的格式在官方文档的云函数API网关触发可以看到。

# -*- coding: utf8 -*-
import json
def main_handler(event, context):
    # 处理传入的数据
    try:
        body = event['body']
        data = json.loads(body)
        file = data['files']['file'] #文件
    except:
        return {
            "code":500,
            "msg":"文件为空"
        }
​
    # 判断是否图片base64数据
    try:
        img = re.sub(r'data:image/(jpeg|png|gif);base64,','',file)#去除文件类型
    except:
        return {
            "code":501,
            "msg":"这不是一张图片"
        }
    
    # 写入到图片
    try:
        imgdata = base64.b64decode(img)
        file_path  = '/tmp/test.jpg'
        fo = open(file_path,'wb')
        fo.write(imgdata)
        fo.close()
        # 图片保存成功 云函数可以操作/tmp目录
        # 这里执行你的逻辑
    except:
        return {
            "code":502,
            "msg":"服务器保存图片错误"
        }

获取API网关访问路径

iapp上传httpbin的回调数据到云函数

t()
{
  s api = "http://httpbin.org/post"
  s tapi ="https://iapi.1ove.icu/release/i-up-up"
  //api网关的地址(这是我的写的图床接口,大家可以使用)
  s file = "/storage/emulated/0/Pictures/WeiXin/1.jpg"
  //上传的文件
  s type = "utf-8"
  //上传到httpbin 传入 参数e
  huf(api, "" , file, type, e)
  //上传 参数e 到云函数
  hs(tapi,e,type,ee)
  //ee 结果
}
  
​

源码

下载

Blog:i.1ove.icu