You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API Gateway配置求助:如何让Lambda接收图片与查询参数

解决API Gateway传递图片+元数据到Lambda的映射问题

我来帮你搞定这个配置!你已经走对了第一步,现在只需要调整映射模板,把查询参数和图片内容一起打包传给Lambda就行,下面是具体步骤:

1. 更新API Gateway集成请求的映射模板

你之前只映射了图片内容,现在要把查询参数(客户ID、手机号这些)也加进去。打开API Gateway对应POST方法的集成请求,找到映射模板,修改现有的application/png模板为:

{
  "imageContent": "$input.body",
  "metadata": {
    "customerId": "$input.params('customerId')",
    "phoneNumber": "$input.params('phoneNumber')"
  }
}

说明:

  • $input.body:保留你原来的图片二进制内容(API Gateway会自动把二进制数据转成Base64字符串传给Lambda,后面Lambda要解码)
  • $input.params('参数名'):通过这个语法获取URL上的查询参数,比如用户调用API时用https://your-api-endpoint?customerId=1001&phoneNumber=138xxxxxxx,就能拿到对应的参数值
  • 如果你的元数据是放在请求头里的,把$input.params('参数名')换成$input.params('header参数名'),比如$input.params('X-Customer-ID')

2. 确保API Gateway启用二进制媒体类型

为了保证图片不被损坏,一定要在API Gateway的设置里,把application/png添加到二进制媒体类型列表中。这样API Gateway会以原始二进制格式处理图片,而不是转成文本。

3. Lambda函数的处理代码示例(Python)

Lambda收到的event会包含你映射的imageContent和metadata,下面是处理上传S3和写入DynamoDB的示例代码:

import boto3
import base64
from datetime import datetime

# 初始化客户端
s3_client = boto3.client('s3')
dynamodb_table = boto3.resource('dynamodb').Table('你的DynamoDB表名')

def lambda_handler(event, context):
    try:
        # 解析元数据
        metadata = event['metadata']
        customer_id = metadata['customerId']
        phone_number = metadata['phoneNumber']
        
        # 解码图片内容(API Gateway传过来的是Base64字符串)
        image_data = base64.b64decode(event['imageContent'])
        
        # 上传到S3:生成唯一的文件名,避免重复
        s3_key = f"user_images/{customer_id}/{datetime.now().strftime('%Y%m%d%H%M%S')}.png"
        s3_client.put_object(
            Bucket='你的S3桶名',
            Key=s3_key,
            Body=image_data,
            ContentType='image/png'
        )
        
        # 写入DynamoDB元数据
        dynamodb_table.put_item(
            Item={
                'customerId': customer_id,
                'phoneNumber': phone_number,
                's3ImageKey': s3_key,
                'uploadTime': datetime.now().isoformat()
            }
        )
        
        return {
            'statusCode': 200,
            'body': '图片上传和元数据存储成功!'
        }
    except Exception as e:
        return {
            'statusCode': 500,
            'body': f'出错了:{str(e)}'
        }

4. 关键注意事项

  • IAM权限:给Lambda角色添加S3的PutObject权限和DynamoDB的PutItem权限,否则会报错
  • 参数名一致性:映射模板里的参数名要和用户调用API时的查询参数名完全一致(大小写敏感)
  • 二进制大小限制:API Gateway默认的请求大小限制是10MB,如果你的图片更大,需要在API Gateway设置里调整payload size

这样配置后,用户调用API时携带图片(POST body)和查询参数,API Gateway就会把两者都传递给Lambda,完成后续的S3上传和DynamoDB存储啦!

内容的提问来源于stack exchange,提问作者vyom kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 11:37:47