Lambda Python boto3 stores file in S3 bucket

ok, I saw some examples of this, and here is my code in AWS Lambda Python 3.6:

# I just wrote out the file before this...
import boto3
tmp = open('/tmp/' + name_str,"rb") 
s3_client = boto3.resource('s3')
bucket = s3_client.Bucket(S3BUCKETNAME)
bucket.put_object(Key=name_str, Body=tmp, ContentType='text/csv', ContentEncoding='utf-8')

The error I get is:

An object

's3.ServiceResource' does not have the attribute 'put_object': AttributeError

Well then I try:

s3_client.upload_file('/tmp/' + name_str, S3BUCKETNAME, name_str)
An object

's3.ServiceResource' does not have the attribute 'upload_file': AttributeError

So ... I have to miss something basic ... Is there any other import? Why can't the system find these features?

+4
source share
1 answer

It was a misunderstanding of which type to use. It should have been:

s3_client = boto3.client ('s3')

But note that the code I'm using now is more like:

s3_client = boto3.client('s3')
with open('/tmp/' + name_str) as file:
    object = file.read()
    s3_client.put_object(Body=object, Bucket=S3BUCKET, Key=name_str, ContentType='whatever/something', ContentEncoding='whatever-itis', StorageClass='PICK_ONE', ACL='you_choose')
+3
source

Source: https://habr.com/ru/post/1689377/


All Articles