Question

Je sais, il y a le nom de boto bibliothèque pour Python, cependant, tout ce que je souhaite faire c'est de téléchargement d'un lot de fichiers image, y compris les métadonnées à un public compartiment S3.Les images devraient aller dans les différents sous-répertoires à l'intérieur du seau.

Avec cURL, c'est censé être au travail:

curl -v -F "key=test/test.jpg" -F "file=@test.jpg" http://my-public-bucket.s3.amazonaws.com/

Donc je me dis que devrait être faisable avec urllib, urllib2 et/ou Python demandes seulement.Mais comment?Je suis totalement nouveau pour Amazon S3 ...et cURL.

Aussi quelle est la meilleure façon de stocker certaines méta-données avec les images?Un supplément de JSON-chaîne de fichier?

Était-ce utile?

La solution

Votre chaîne de courbure se traduit par approximativement ce qui suit:

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)

La forme générale des demandes de la syntaxe de téléchargement de plusieurs demandes est trouvée dans Cette réponse de Stackoverflow répond .

Autres conseils

À l'aide de boto (version 2.6.0) vous auriez du faire comme ceci:

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(...)

Assurez-vous que vous avez les informations d'identification dans les variables d'environnement AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY.

C'est tout.

fonctionne avec des demandes Python uniquement:

import requests
r = requests.post('my_public_bucket', files={'file': open('/path/test.txt', 'rb')}, data={'key': 'test/test.txt'})

Télécharger sur une URL signée et des demandes que je devais faire ceci:

with open('photo_1.jpg', 'rb') as content_file:
    content = content_file.read()
result = requests.put(url=upload_url, headers={}, data=content)

C'est mauvais car il charge tout en mémoire, mais il devrait vous faire dépasser la bosse initiale.

Aussi lorsque vous utilisez CURL, j'ai dû utiliser l'option différente:

curl -X PUT --upload-file photo_1.jpg <url>

Remarque: lorsque j'ai créé l'URL sur mon serveur avec Boto, je définis les en-têtes= aucun pour que les en-têtes ne soient pas un problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top