2012-11-04 87 views
0

突然,當我將文件上載到S3時,它正在上傳爲0字節。0將字節上傳到Django中的Amazon S3應用程序

我不知道爲什麼這是突然發生,因爲它工作得很好。這裏是我的代碼:

def store_in_s3_avatar(pathtofile, avatarimage, filename, user): 
    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 = "/media/avatars/%s/%s" % (user,filename) 
    k.set_metadata("Content-Type", mime) 
    k.set_contents_from_string(avatarimage) 
    k.set_acl("public-read") 
    return pathtofile 

下面是調用該函數的views.py片段:

if request.method == "POST": 
     updated = False 
     if 'avatar' in request.FILES: 
      path = avatar_file_path(user=request.user, 
       filename=request.FILES['avatar'].name) 
      avatar = Avatar(
       user = request.user, 
       primary = True, 
       avatar = path, 
      ) 
      new_file = avatar.avatar.storage.save(path, request.FILES['avatar']) 
      avatarcontent = request.FILES['avatar'] 
      filename = request.FILES['avatar'].name 
      avatarimage = avatarcontent.read() 
      user=request.user 
      avatar.avatar = store_in_s3_avatar(path, avatarimage, filename, user) 
      avatar.save() 
      ... 
+0

UPDATE:我通過註釋'NEW_FILE = avatar.avatar.storage.save(路徑,request.FILES [ '化身'])'固定它。有人能解釋爲什麼會導致這個問題? – user1328021

回答

1

根據您所描述的行爲,我敢打賭,文件指針在最後,因爲你明確地稱爲storage.save()函數。通過兩次閱讀文件,你什麼也得不到。

f = StringIO.StringIO('foobar') 
f.read() # out 'foobar' 
f.read() # out '' 
f.seek(0) 
f.read() # out 'foobar' 
相關問題