当通过邮递员将图像发送到我在 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 的发布请求
抛出错误是因为您正在将编码的 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': '*'}
}