使用boto3将字符串写入S3:“'dict'对象没有属性'put'”

4
在AWS Lambda中,我正在使用boto3将一个字符串放入S3文件中:
import boto3
s3 = boto3.client('s3')
data = s3.get_object(Bucket=XXX, Key=YYY)
data.put('Body', 'hello')

我被告知如下内容:
[ERROR] AttributeError: 'dict' object has no attribute 'put'

同样的情况也发生在data.put('hello')这个方法上,这是顶级答案建议的方法,来源于如何使用boto3将文件或数据写入S3对象,以及data.put_object'dict' object has no attribute 'put_object'
我做错了什么?
相反地,读取工作正常(使用data.get('Body').read().decode('utf-8'))。

我发现使用S3最简单的方法是先在本地创建一个文件,然后通过put_object()上传它。这样,您可以将“文件创建”与“文件上传”分开,使调试更加容易。 - John Rotenstein
1个回答

10

put_objects3对象的一个方法,而不是数据对象。

以下是Python 3.7的完整工作示例:

import json
import boto3
s3 = boto3.client('s3')
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):

    bucket = 'mybucket'
    key = 'id.txt'
    id = None

    # Write id to S3
    s3.put_object(Body='Hello!', Bucket=bucket, Key=key)

    # Read id from S3
    data = s3.get_object(Bucket=bucket, Key=key)
    id = data.get('Body').read().decode('utf-8') 
    logger.info("Id:" + id)


    return {
        'statusCode': 200,
        'body': json.dumps('Id:' + id)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接