2017-02-03 8 views
0

У меня есть URL-адрес изображения s3 bukcet. Я пытаюсь загрузить это изображение с помощью urllib или wget, в обоих случаях код выполняется успешно, но загружается поврежденное изображение. Когда я говорю о коррупции, я имею в виду, что для изображения размером 2 МБ загружается только 200 КБ.не может скачать форму изображения S3 bucket

urllib.urlretrieve(str(sys.argv[1]), "data/img"+str(randomword(10))+".jpg")

В последней части линии, я просто добавить случайную строку в качестве имени образа, который должен быть загружен.

Pls помочь

+0

Вы проверили ответ? изображение, которое было сохранено, на самом деле может быть ответом aws xml, в котором говорится, что он не прошел из-за разрешений или чего-то еще. Попробуйте открыть изображение с помощью текстового редактора, чтобы узнать, так ли это. – davidejones

+0

да, я получил ответ XML, говоря 'Access Denied' ' Error>AccessDenied Access Denied ' – Guru

+0

Как я мог бы получить над этим – Guru

ответ

1

Вы можете получить файл с помощью проверки подлинности первого и загрузки. Я бы рекомендовал использовать библиотеку python boto для работы с веб-службами amazon. Если вы сделали, что код будет выглядеть примерно как этот

import boto 

# set your AWS creds on your environment path or hardcode it 
AWS_ACCESS_KEY_ID = os.getenv("AWS_KEY_ID") 
AWS_ACCESS_SECRET_KEY = os.getenv("AWS_ACCESS_KEY") 

conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_ACCESS_SECRET_KEY) 

bucket = conn.get_bucket("my_bucket_name") 

key = bucket.get_key('file_on_s3.txt') 
key.get_contents_to_filename('where_file_goes_locally.txt') 

Если вы действительно не хотите использовать Boto, вы можете собрать их вместе вручную и по существу же, что Boto делает создать правильные заголовки запросов от ваших AWS кредитки. Я делаю это, используя скрипт bash на сервере, который у меня есть. Это должно указывать вам в правильном направлении (https://gist.github.com/davidejones/d05f51df75e659111227), если вы хотите переписать это с помощью запросов python или urllib, которые также должны работать.