2014-09-10 7 views
0

Учитывая URL загружаемого файла, например:POST URL в S3 непосредственно

http://zannee-docs.s3.amazonaws.com/rockefeller-summary.pdf 

Есть ли способ POST/PUT это непосредственно S3? Или это необходимо, чтобы я:

# download the file 
requests.get(url, stream=True) 

# save the file locally 

# upload the local file to S3 
s3.upload_file() 

Если есть способ, чтобы загрузить его непосредственно на S3 (без необходимости загружать его и повторно загрузить его в S3), как бы я это сделать?

ответ

3

Да, но только, если исходный URL-адрес также размещен на S3, и ваш ключ S3 может получить к нему доступ. (В документации не говорит это явна, но я думаю, что исходный объект должен быть сохранен в том же регионе.)

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html

Поскольку вы используете боты, специфический API вы хочет - boto.s3.key.Key.copy().

+0

Спасибо, так что если объект принадлежит кому-то еще, это не было бы возможно сделать? – David542

+0

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

0

Возможно использовать предварительно подписанные URL-адреса для объектов PUT непосредственно на S3. Я не верю, что вы можете заставить его работать с POST, потому что POST должен кодировать тело запроса, но, возможно, есть способ сделать это тоже. Это SO нить должна быть полезной:

How to generate a temporary url to upload file to Amazon S3 with boto library?

+0

Правильно, но разве это не создание временного файла из файла, к которому у вас уже есть доступ? – David542

+0

Это действительно так. Извините, я недостаточно внимательно прочитал ваш вопрос. В этом случае, к сожалению, ответа нет. Дополнительную информацию см. На странице http://stackoverflow.com/questions/7586533/is-it-possible-to-upload-to-s3-directly-from-url-using-post?rq=1. – garnaat

Смежные вопросы