2014-11-07 2 views
6

Я пытаюсь загрузить файл в boto,Почему я получаю 400 при загрузке файла с помощью boto?

import io 

from boto.s3 import connection 
from boto.s3 import key 

conn = connection.S3Connection() 
bucket = conn.get_bucket('my-bucket') 

my_key = key.Key(bucket, 'asdf') 

d = b'this is a test....\n' * 512000 
f = io.BytesIO(d) 

my_key.send_file(f, size=4*1024) 

Однако это приводит:

boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request 
<?xml version="1.0" encoding="UTF-8"?><Error><Code>BadRequest</Code><Message>An error occurred when parsing the HTTP request.</Message><RequestId>[hex request ID]</RequestId><HostId>[giant piece of base64]</HostId></Error> 

Почему этот запрос неудачу?

(примечание: вся причина, я использую send_file здесь потому, что open поддерживает, очевидно, только чтение ...)

+0

Что произойдет, если вы выполните 'my_key.set_contents_from_file (f)' '. Вы получаете ту же ошибку? – garnaat

+0

@ garnaat Звонок преуспевает; частью этого является то, что 'boto' не считывает весь файл в память: если я добавляю аргумент размера,' set_contents_from_file' только считывает первые байты размера. (Это то, что говорят docs, что функция будет делать, но это не то, что я хочу.) – Thanatos

+0

Похоже, что вы действительно хотите, это правда, но, к сожалению, S3 этого не поддерживает. По крайней мере, пока. – garnaat

ответ

4

Для чего это стоит, заменив send_file() с set_contents_from_file() работал для меня (у меня была та же ошибка).

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