错误 lambda aws 函数处理图像以保存到 S3

问题描述 投票:0回答:1

当通过邮递员将图像发送到我在 AWS 中创建的 api 时,我遇到无法解决的错误,我在 lambda 函数中处理请求并读取图像的内容,我将其以 base64 解码为稍后使用以下代码将其保存在 s3 的存储桶中:


def lambda_handler(event, context):    
    
    img_data = base64.b64decode(event['body'])
  
    # Guarda la imagen en un archivo temporal
    aux_path = '/tmp/{}.jpg'.format(generate_unique_id())
    with open(aux_path, 'wb') as f:
        f.write(img_data)
        
    # Sube la imagen a S3
    bucket = 'mys3'
    s3_key = '{}.jpg'.format(generate_unique_id())
    s3.upload_file(aux_path, bucket, s3_key)
    
    return {
        'statusCode': 200, 
        'body': json.dumps({'message': 'file saved successfully'}), 
        'headers': {'Access-Control-Allow-Origin': '*'}
    }

问题是在解码图像时出现以下错误:

[ERROR] ValueError: string argument should contain only ASCII characters
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 16, in lambda_handler
    img_data = base64.b64decode(event['body'])
  File "/var/lang/lib/python3.12/base64.py", line 83, in b64decode
    s = _bytes_from_decode_data(s)
  File "/var/lang/lib/python3.12/base64.py", line 39, in _bytes_from_decode_data
    raise ValueError('string argument should contain only ASCII characters')

在 API 配置中我已添加为二进制媒体类型/所以应该不会有问题。

有什么建议吗?非常感谢你

我正在尝试使用 lambda 函数将图像保存在 s3 中。我通过 postaman 将图像发送到在 aws 中创建的 api。 这里是帖子请求: 我发送到 API 的发布请求

python amazon-web-services lambda
1个回答
0
投票

抛出错误是因为您正在将编码的 Base64 图像写入文件系统,而不是其解码版本。

def lambda_handler(event, context):    
    
    img_data = base64.b64decode(event['body'])
  
    # Guarda la imagen en un archivo temporal
    aux_path = '/tmp/{}.jpg'.format(generate_unique_id())
    with open(aux_path, 'wb') as f:
        f.write(img_data) # What fixes your problem ^_^
        
    # Sube la imagen a S3
    bucket = 'mys3'
    s3_key = '{}.jpg'.format(generate_unique_id())
    s3.upload_file(aux_path, bucket, s3_key)
    
    return {
        'statusCode': 200, 
        'body': json.dumps({'message': 'file saved successfully'}), 
        'headers': {'Access-Control-Allow-Origin': '*'}
    }
© www.soinside.com 2019 - 2024. All rights reserved.