Загружайте изображения и метаданные в общедоступную корзину Amazon S3 с помощью запросов Python.

StackOverflow https://stackoverflow.com//questions/21007885

Вопрос

Я знаю, что для 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 на моем сервере с бото, я устанавливаю заголовки= никто, чтобы заголовки не были бы проблемой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top