Upload File to Amazon S3

How do I upload a file to Amazon S3?

After getting the file upload credentials, as described in Upload File Credentials API Overview, we need to use postParams and postURL from the response of Upload File Credentials API in order to upload a file from local machine to Amazon S3. Here is a python script that does it:

import sys
import requests
from mimetypes import MimeTypes
import urllib

# Absolute path of the file to be uploaded nneds to be provided as an argument while executing this python script
filePathAndName = sys.argv[1]
fileName = filePathAndName.split('/')[-1]

# Use the postParams from the response of upload file credentials API in the previous step
postParams = {"AWSAccessKeyId": "AKIAJVHMPPPB2CQJZOVQ","acl": "private","key": "prod/VZ2PM6C8UAL73D2S8VSR/source","policy": "eyJleHBpcmF0aW9uIjogIjIwMTctMDktMjFUMjM6MjM6MjcuMDAwWiIsICJjb25kaXRpb25zIjogW3siYnVja2V0IjogInVwbG9hZC1idWNrZXQtaW50In0sIHsiYWNsIjogInByaXZhdGUifSwgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgImludGVncmF0aW9uL1ZaMlBNNkM4VUFMNzNEMlM4VlNSLyJdLCB7IngtYW16LW1ldGEtbWFuYWdlSG9zdCI6ICJRWEVCaUlrRThra3Q2OVp0dnVtWXVSNDZNZktNV2d6WTkzTUJzY1VEMjJIdXpGUW54V3doY3lNcnlSQW5lSGw3ajhaQ2RSUWRrOGFiZXp2WFpVZlhzZDQ1NVBDVDhRcWc4VmR0WmhYaTEtWWR0elVUaDNkYmI2T1pfS0Vld3RjY243eGl5Qm1sM0RNNUs5RFdxanJvbWpieEJZN0dyMHNWVDFZU21vNG8yYkxiS3lmdkpoV0FScjUyc0RjdF83ODl3UjZVOVdmajdqWmJfd3o2VWRzVUwxM1ViRjEwRWVKb29LNzVuVTJsQlhaZ2ZlbGYyNXZUaVZnRCJ9LCB7IngtYW16LW1ldGEtdXNlclZJRCI6ICJxRDVrX0RWOTNEckRXRDgxbWR1cUQwM09aSVJJMXdUZXJHcWNyMlpHcjVLeWNFT3VMZ21PY2xyRG1Yd0RrRkFLNDJxSnBjbi00cThzVVlrVTN2UHFaTG5qSk9DV0VzOFdxQVdVbEItNk9IdmlzWTJIamxCRUdpMDhYd1ZIOHhtcmdDQng0TVFhVDYwTjNtWDZFMWxRRWtFbzctdnJ0R2hSemZyb092VkFaYWQ1WkxVWHh6SkFnN2ZwY0V6UkdzV1ZBVFBwWEVvSnA2eDh6YlRqQl9INGQzSzZwV1NPcGw1blRBZ1gifSwgeyJ4LWFtei1tZXRhLWZpbGVuYW1lIjogIlRKTy1fSEFET0VHTkNPbG5fWGdxYlZXT3lidnlUbTdMSldadkRFVzZhNTgtbW5EUkZPM1dQRFZVclBiZDNGYU1lVm15SDhramN0S3drV2hRZ2M3MHl3RzZxT1dYZkNyRlEzR1BsTDNaUWRTaF85cUxpZkxVaTRLVUpsdzNvRUNBSU5FeXNYVnpXa2ZJQWNnUUtVZlkxYlpGVlR6RjlzZDFMTUo1UFoxS1VSZGZ0WUc0Vk56QlIzZzhQUVBYNExJN0RHWFh4YmhENElDYlZrSWhEYm55c2RLdlZjdmo0M19wNUtNNzJRIn0sIHsieC1hbXotc2VydmVyLXNpZGUtZW5jcnlwdGlvbiI6ICJBRVMyNTYifSBdfQ==","signature": "l9FRsuYHFcmoQzVi8+oA4nL3Tlk=","x-amz-meta-filename": "TJO-_HADOEGNCOln_XgqbVWOybvyTm7LJWZvDEW6a58-mnDRFO3WPDVUrPbd3FaMeVmyH8kjctKwkWhQgc70ywG6qOWXfCrFQ3GPlL3ZQdSh_9qLifLUi4KUJlw3oECAINEysXVzWkfIAcgQKUfY1bZFVTzF9sd1LMJ5PZ1KURdftYG4VNzBR3g8PQPX4LI7DGXXxbhD4ICbVkIhDbnysdKvVcvj43_p5KM72Q","x-amz-meta-manageHost": "QXEBiIkE8kkt69ZtvumYuR46MfKMWgzY93MBscUD22HuzFQnxWwhcyMryRAneHl7j8ZCdRQdk8abezvXZUfXsd455PCT8Qqg8VdtZhXi1-YdtzUTh3dbb6OZ_KEewtccn7xiyBml3DM5K9DWqjromjbxBY7Gr0sVT1YSmo4o2bLbKyfvJhWARr52sDct_789wR6U9Wfj7jZb_wz6UdsUL13UbF10EeJooK75nU2lBXZgfelf25vTiVgD","x-amz-meta-userVID": "qD5k_DV93DrDWD81mduqD03OZIRI1wTerGqcr2ZGr5KycEOuLgmOclrDmXwDkFAK42qJpcn-4q8sUYkU3vPqZLnjJOCWEs8WqAWUlB-6OHvisY2HjlBEGi08XwVH8xmrgCBx4MQaT60N3mX6E1lQEkEo7-vrtGhRzfroOvVAZad5ZLUXxzJAg7fpcEzRGsWVATPpXEoJp6x8zbTjB_H4d3K6pWSOpl5nTAgX","x-amz-server-side-encryption": "AES256"}
postURL = "https://upload-bucket-int.s3.amazonaws.com/"

mime = MimeTypes()
url = urllib.pathname2url(filePathAndName)
mimeType = mime.guess_type(url)
 
files = [('file',(fileName, open(filePathAndName, 'rb'), mimeType))]
 
uploadRes = requests.post(postURL, data=postParams, files=files)
print uploadRes

How do I run this python script ?

You will need to provide absolute path of your local file in order to upload a file to Amazon S3 as shown in the code snippet below.

python ./upload_file_to_s3.py /Users/name/Desktop/test.png

What is the expected output from running this python script ?

It takes ~3 seconds to upload a file to Amazon S3. If the file upload is successful, you will see the following output:

<Response [204]>