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

在AWS Lambda Python中解析FormData提交的Base64内容,提取用户名与文件

从Multipart FormData中提取用户名与文件内容

你当前拿到的是multipart/form-data格式的原始字节流,手动分割解析容易出错,推荐用以下两种方案处理:

方案1:使用multipart库(推荐)

该库专门用于解析multipart类型数据,步骤如下:

  1. 若Lambda环境未预装multipart,需将其打包为Lambda层或包含在部署包中。
  2. 解析代码示例:
import base64
import multipart

def lambda_handler(event, context):
    # 解码Base64编码的请求体
    body_bytes = base64.b64decode(event['body'])
    # 从请求头中提取boundary分隔符
    content_type = event['headers']['Content-Type']
    boundary = content_type.split('boundary=')[1].encode('utf-8')
    
    # 初始化解析器并处理数据
    parser = multipart.MultipartParser(body_bytes, boundary)
    
    username = None
    file_content = None
    file_name = None
    
    for part in parser.parts():
        if part.name == 'username':
            username = part.text
        elif part.name == 'file':
            file_name = part.filename
            # 文本文件解码为字符串,二进制文件直接保留bytes
            file_content = part.raw.read().decode('utf-8')
    
    return {
        'statusCode': 200,
        'body': {
            'username': username,
            'file_name': file_name,
            'file_content': file_content
        }
    }

方案2:使用Python标准库cgi(无需额外依赖)

如果不想引入第三方库,可利用Python内置的cgi模块模拟表单解析环境:

import base64
import cgi
from io import BytesIO

def lambda_handler(event, context):
    body_bytes = base64.b64decode(event['body'])
    content_type = event['headers']['Content-Type']
    
    # 构建CGI解析所需的环境变量与输入流
    environ = {
        'CONTENT_TYPE': content_type,
        'CONTENT_LENGTH': str(len(body_bytes))
    }
    fp = BytesIO(body_bytes)
    
    # 解析表单数据
    form = cgi.FieldStorage(fp=fp, environ=environ, keep_blank_values=True)
    
    # 提取字段值
    username = form.getvalue('username')
    file_item = form['file']
    file_name = file_item.filename
    # 文本文件转字符串,二进制文件保留bytes
    file_content = file_item.file.read().decode('utf-8')
    
    return {
        'statusCode': 200,
        'body': {
            'username': username,
            'file_name': file_name,
            'file_content': file_content
        }
    }

关键注意点

  • 若上传的是二进制文件(如图片、压缩包),请移除decode('utf-8'),直接保留bytes类型,方便后续存储到S3等服务。
  • 使用第三方库时,需确保Lambda环境能访问到该库(通过层或打包部署)。
  • 确认API Gateway集成设置为传递原始Base64请求体,不要自动解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:35:21