Загружайте изображения и метаданные в общедоступную корзину Amazon S3 с помощью запросов Python.
-
21-12-2019 - |
Вопрос
Я знаю, что для Python существует библиотека boto, однако все, что мне нужно, — это загрузить множество файлов изображений, включая метаданные, в общедоступную корзину S3.Изображения должны находиться в различных подкаталогах внутри корзины.
С cURL это должно работать:
curl -v -F "key=test/test.jpg" -F "file=@test.jpg" http://my-public-bucket.s3.amazonaws.com/
Поэтому я считаю, что это должно быть выполнимо только с запросами urllib, urllib2 и/или Python.Но как?Я совершенно новичок в Amazon S3...и КУЛР.
И как лучше всего хранить метаданные вместе с изображениями?Дополнительный файл строки JSON?
Решение
Ваша строка скручиваемости переводится в примерно следующее:
import requests
url = 'http://my-public-bucket.s3.amazonaws.com/'
files = {
'key': ('', 'test/test.jpg'),
'file': open('test.jpg', 'rb'),
}
r = requests.post(url, files=files)
.
Общая форма монтажной формы запросов «Синтаксис для загрузки загрузки» находится в Этот ответ Stackoverflow .
Другие советы
С использованием boto
(версия 2.6.0) вы бы сделали это так:
import boto
connection = boto.connect_s3()
bucket = connection.get_bucket('mybucket')
key = bucket.new_key('myimage.jpg')
key.set_contents_from_filename('myimage.jpg')
key.set_metadata(...)
Убедитесь, что у вас есть учетные данные в переменных среды. AWS_ACCESS_KEY_ID
и AWS_SECRET_ACCESS_KEY
.
Вот и все.
работает только с запросами Python:
import requests
r = requests.post('my_public_bucket', files={'file': open('/path/test.txt', 'rb')}, data={'key': 'test/test.txt'})
. Чтобы загрузить на подписанный URL и запросы, которые я должен был сделать:
with open('photo_1.jpg', 'rb') as content_file:
content = content_file.read()
result = requests.put(url=upload_url, headers={}, data=content)
.
Это плохо, потому что он загружает все в память, но он должен заставить вас мимо начального горба.
Также при использовании curl я должен был использовать другой вариант:
curl -X PUT --upload-file photo_1.jpg <url>
.
Примечание. Когда я создал URL на моем сервере с бото, я устанавливаю заголовки= никто, чтобы заголовки не были бы проблемой.