2016-05-11 5 views
0

S3からHTMLサーバーにファイルを含むフォームを投稿するAWSラムダ関数があります。AWS S3のファイルを使用してマルチパート/フォームデータを投稿する方法

import requests 
url = 'http://...' 
# ... 
self.session = requests.session() 
# ... 

filename = 'mammals/aboutzebras.doc' 
data = { 
    "name":"document", 
    "method":"upload" 
} 

resource = boto3.resource('s3')   
objectSummary = resource.ObjectSummary('bucket', filename) 
body = objectSummary.get()["Body"] 
file_content = body.read() 

files = {'file': ('content', file_content, 'application/doc;charset=utf8')} 

page = self.session.post(
    url, 
    files=files, 
    data=data 
    ) 

print("Status code = %s" % page.status_code) 
# >> Status code = 500 

私は正常にAWS S3からMS-Wordファイルからデータを取得し、file_contentにそれを置くが、私はそれをコード化するbase64のに必要なのですよ? (私はw/oの成功を試みた)。私は、ヘッダーContent-Lengthで見ることができますrequests.postにより送信されたリクエスト・オブジェクトに

Content-Typemultipart/form-dataあるとboundayが設定されていることを、正しく設定されています。

self.sessions.postへの私の呼び出しは、私が呼び出しているサーバーから500のステータスコードを返します。私のコードは何ですか?

<form>をHTML文書で使用してurlに送信すると、status_code200となり、すべて正常です。私は続く例の

答えて

0

誤解:

files = {'file': ('content', file_content, 'application/doc;charset=utf8')} 

'file'位置は、フォームフィールド名ではなく'file''content'に必要なファイル名ではなく、フォームのフィールド名です。

例えば、

files = {'fieldname': ('filename.ext', file_content, 'application/doc;charset=utf8')} 
関連する問題