Пример: загрузка файла в AWS S3 с помощью Boto

Пример кода Amazon Web Services (AWS) - это набор чрезвычайно популярных сервисов для веб-сайтов и приложений, поэтому важно знать, как взаимодействовать с различными сервисами. Здесь мы сосредоточены на Simple Storage Service [http://en.wikipedia.org/wiki/Amazon_S3] (S3), который по сути является сервисом хранилища файлов. Все файлы должны быть назначены сегменту, которому присвоено имя, и к нему можно обратиться по адресу http://s3.amazonaws.com/{bucket}/{key}. Каждому файлу присваивается уникальный ключ, который можно использовать

Пример кода

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.

Ресурсы

comments powered by Disqus

Содержание