0 votes
1 view
in AWS by (19.2k points)

ok, I've seen a few 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 :

's3.ServiceResource' object has no attribute 'put_object': AttributeError

Well, then I try:

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

's3.ServiceResource' object has no attribute 'upload_file': AttributeError

So... I must be missing something basic... Is there some other import? Why can't the system find these functions?

1 Answer

0 votes
by (44.6k points)

It should be this:

s3_client = boto3.client('s3')

Code currently after the change will look like this:

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')

Related questions

Welcome to Intellipaat Community. Get your technical queries answered by top developers !