繁体   English   中英

编写 lambda function 将文件上传到我的 S3 存储桶

[英]Writing a lambda function to upload files to my S3 bucket

我正在尝试编写一个 lambda function 来将文件上传到我的 S3 存储桶。

我是编码新手,所以我不明白为什么这不起作用。

我得到 Body 的“KeyError”。 谁能解释这意味着什么以及如何修复我的代码?

提前致谢。

import base64
import boto3
import json
import uuid

s3 = boto3.client('s3')


def lambda_handler(event, context):
    print(event)
    response = s3.put_object(
        Bucket='s3-bucket',
        Key=str(uuid.uuid4()) + '.jpg',
        Body=event.body,
    )

    image = response['Body'].read()
    return {
        'headers': { 
            "Content-Type": "image/jpg",
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
            "Access-Control-Allow-Methods": "*",
            "Access-Control-Allow-Credentials": True,
        },
        'statusCode': 200,
        'body': base64.b64encode(image).decode('utf-8'),
        'isBase64Encoded': True
    }

我尝试用 Body=event['body'] 或 Body = event('body') 替换 Body = event.body 但它仍然不起作用。

我希望我的 lambda function 能够将文件上传到我的 S3 存储桶。

如果失败,您对put_object的调用将引发异常。 你可以抓住这个并做出相应的回应,例如:

import boto3
from botocore.exceptions import ClientError

def lambda_handler(event, context):
    print(event)

    try:
        response = s3.put_object(
            Bucket='s3-bucket',
            Key=str(uuid.uuid4()) + '.jpg',
            Body=event.body)

        return {
            'headers': { ... },
            'statusCode': 200
        }
    except ClientError as e:
        print("Error from put_object:", event)

        return {
            'headers': { ... },
            'statusCode': 500
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM