2014-11-07 15 views
6

Ben boto için bir dosya yüklemeye çalışılıyor,Boto ile dosya yüklerken neden 400 tane alabilirim?

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) 

Ancak bu sonuçları:

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> 

Bu istek neden başarısız oluyor?

(not: open görünüşte sadece ... Okumaya destekler çünkü burada send_file kullanıyorum bütün neden olduğu) set_contents_from_file() ile send_file() yerine buna değer ne için

+0

Eğer '' my_key.set_contents_from_file (f) '' yaparsanız ne olur. Aynı hatayı aldın mı? – garnaat

+0

@garnaat Çağrı başarılı; Bunun bir parçası, 'boto'nun tüm dosyayı belleğe okumadığından emin olmaktır: boyut argümanını eklerseniz,' set_contents_from_file 'sadece ilk 'size' baytını okur. (Bu, işlevlerin ne yapacağını doktorların söyledikleridir, ama istediğim şey değil.) – Thanatos

+0

Gerçekten istediğin gibi gerçek ses akışı gibi geliyor ama maalesef S3 bunu desteklemiyor. En azından henüz değil. – garnaat

cevap

4

(aynı hata vardı) benim için çalıştı.