Пример кода
Amazon Web Services (AWS) - это набор чрезвычайно популярных сервисов для веб-сайтов и приложений, поэтому важно знать, как взаимодействовать с различными сервисами. Здесь мы сосредоточимся на Simple Storage Service (S3), который по сути является сервисом хранилища файлов.
Все файлы должны быть назначены сегменту, которому присвоено имя, и к
нему можно обратиться по адресу http://s3.amazonaws.com/{bucket}/{key}
. Каждому файлу присваивается уникальный ключ, который позже можно
использовать для извлечения файла.
Существует множество других опций, которые можно назначить сегментам и файлам (шифрование, списки контроля доступа и т. Д.), Но мы не будем здесь подробно останавливаться на этом. Просто обратите внимание на ссылки на «public-read», что позволяет скачивать файл кем угодно.
Код
В приведенном ниже коде показано, как в Python с использованием boto загрузить файл в S3.
import os
import boto
from boto.s3.key import Key
def upload_to_s3(aws_access_key_id, aws_secret_access_key, file, bucket, key, callback=None, md5=None, reduced_redundancy=False, content_type=None):
"""
Uploads the given file to the AWS S3
bucket and key specified.
callback is a function of the form:
def callback(complete, total)
The callback should accept two integer parameters,
the first representing the number of bytes that
have been successfully transmitted to S3 and the
second representing the size of the to be transmitted
object.
Returns boolean indicating success/failure of upload.
"""
try:
size = os.fstat(file.fileno()).st_size
except:
# Not all file objects implement fileno(),
# so we fall back on this
file.seek(0, os.SEEK_END)
size = file.tell()
conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key)
bucket = conn.get_bucket(bucket, validate=True)
k = Key(bucket)
k.key = key
if content_type:
k.set_metadata('Content-Type', content_type)
sent = k.set_contents_from_file(file, cb=callback, md5=md5, reduced_redundancy=reduced_redundancy, rewind=True)
# Rewind for later use
file.seek(0)
if sent == size:
return True
return False
Использование кода
И вот как вы бы использовали код:
AWS_ACCESS_KEY = 'your_access_key'
AWS_ACCESS_SECRET_KEY = 'your_secret_key'
file = open('someFile.txt', 'r+')
key = file.name
bucket = 'your-bucket'
if upload_to_s3(AWS_ACCESS_KEY, AWS_ACCESS_SECRET_KEY, file, bucket, key):
print 'It worked!'
else:
print 'The upload failed...'
boto работает не только с S3, вы также можете получить доступ к EC2 , SES , SQS и практически ко всем другим сервисам AWS. Документация по ботам великолепна, поэтому их чтение должно дать вам хорошее представление о том, как пользоваться другими сервисами. Но если нет, мы опубликуем больше примеров ботинок, например, как получить файлы из S3.