2012-05-11 38 views
0

我試圖上傳一個文件,使用multipart_encode來實現MIME進程。但是,我遇到了以下錯誤AttributeError: multipart_yielder instance has no attribute '__len__'。以下是我的方法,我非常感謝任何人都可以給我一些建議。使用multipart_encode(海報庫)的問題

url = "https://pi-user-files.s3-external-1.amazonaws.com/"   
post_data = {} 
#data is a dict 
post_data['AWSAccessKeyId']=(data['ticket']['AWSAccessKeyId']) 
post_data['success_action_redirect']=(data['ticket']['success_action_redirect']) 
post_data['acl']=(data['ticket']['acl']) 
post_data['key']=(data['ticket']['key']) 
post_data['signature']=(data['ticket']['signature']) 
post_data['policy']=(data['ticket']['policy']) 
post_data['Content-Type']=(data['ticket']['Content-Type']) 

#I would like to upload a text file "new 2" 
post_data['file']=open("new 2.txt", "rb") 

datagen, headers = multipart_encode(post_data) 
request2 = urllib2.Request(url, datagen, headers) 
result = urllib2.urlopen(request2) 

回答

3

如果你想發送一個文件,你應該換其他參數與MultipartParam對象,示例代碼創建一個發送文件請求:

from poster.encode import multipart_encode, MultipartParam 
import urllib2 

def postFileRequest(url, paramName, fileObj, additionalHeaders={}, additionalParams={}): 
    items = [] 
    #wrap post parameters 
    for name, value in additionalParams.items(): 
     items.append(MultipartParam(name, value)) 
    #add file 
    items.append(MultipartParam.from_file(paramName, fileObj)) 
    datagen, headers = multipart_encode(items) 
    #add headers 
    for item, value in additionalHeaders.iteritems(): 
     headers[item] = value 
    return urllib2.Request(url, datagen, headers) 

此外我認爲你應該在執行一次register_openers()開始。一些細節你可以在docs