2012-11-01 60 views
4

我試圖將文件上傳到S3(實際上上傳的作品),但我的應用程序崩潰,並引發了錯誤說:爲S3上傳使用博託我得到一個EOF錯誤

fp is at EOF. Use rewind option or seek() to data start.

我看到人們解決這個問題的一些方法是將rewind=True添加到他們的set_contents_from_string調用中。然而,這將引發以下錯誤:

set_contents_from_string() got an unexpected keyword argument 'rewind'

以下是我views.py的內容。我究竟做錯了什麼?

def store_in_s3(filename, filecontent): 
    conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY) 
    b = conn.create_bucket('mybucket') 
    mime = mimetypes.guess_type(filename)[0] 
    k = Key(b) 
    k.key = filename 
    k.set_metadata("Content-Type", mime) 
    k.set_contents_from_string(filecontent) 
    #k.set_contents_from_string(filecontent, rewind=True) 
    k.set_acl("public-read") 

def add_m(request, points=None): 
    mname = request.GET.get ('mname') 
    format = request.GET.get ('format') 
    type = request.GET.get ('type') 
    if request.method == "POST": 
     formtoaddm = spiceform(request.POST, request.FILES) 
     if formtoaddm.is_valid(): 
      new_m = formtoaddm.save(commit=False) 
      new_m.adder = request.user 
      mname = new_m.mname 
      file = request.FILES['content'] 
      filename = file.name 
      filecontent = file.read() 
      store_in_s3(filename, filecontent) 
      ... 
+0

好吧我想我通過在讀它後加入: 'file.seek(0)'來修復它。但我不知道爲什麼。有人可以解釋嗎? – user1328021

+2

file.seek(0)將讀取光標放回到文件的開頭,然後再次執行file.read()並再次獲取所有內容。 – Spike

+0

您是否嘗試過使用此行取消註釋:#k.set_contents_from_string(filecontent,rewind = True)? – dzida

回答

2

filecontent = file.read() 

地說:

file.seek(0) 
2

看到最後的評論​​。假設您使用的是Django-Storages,只需升級到最新版本即可解決問題。