How to write a file or data to an S3 object using boto3 How to write a file or data to an S3 object using boto3 python python

How to write a file or data to an S3 object using boto3


In boto 3, the 'Key.set_contents_from_' methods were replaced by

For example:

import boto3some_binary_data = b'Here we have some data'more_binary_data = b'Here we have some more data'# Method 1: Object.put()s3 = boto3.resource('s3')object = s3.Object('my_bucket_name', 'my/key/including/filename.txt')object.put(Body=some_binary_data)# Method 2: Client.put_object()client = boto3.client('s3')client.put_object(Body=more_binary_data, Bucket='my_bucket_name', Key='my/key/including/anotherfilename.txt')

Alternatively, the binary data can come from reading a file, as described in the official docs comparing boto 2 and boto 3:

Storing Data

Storing data from a file, stream, or string is easy:

# Boto 2.xfrom boto.s3.key import Keykey = Key('hello.txt')key.set_contents_from_file('/tmp/hello.txt')# Boto 3s3.Object('mybucket', 'hello.txt').put(Body=open('/tmp/hello.txt', 'rb'))


boto3 also has a method for uploading a file directly:

s3 = boto3.resource('s3')    s3.Bucket('bucketname').upload_file('/local/file/here.txt','folder/sub/path/to/s3key')

http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Bucket.upload_file


You no longer have to convert the contents to binary before writing to the file in S3. The following example creates a new text file (called newfile.txt) in an S3 bucket with string contents:

import boto3s3 = boto3.resource(    's3',    region_name='us-east-1',    aws_access_key_id=KEY_ID,    aws_secret_access_key=ACCESS_KEY)content="String content to write to a new S3 file"s3.Object('my-bucket-name', 'newfile.txt').put(Body=content)