5

Pythonで「リクエスト」を使用してマルチパートフォームのアップロードを試みています。ファイルをアップロードできますが、curl の -F フラグを介して通常渡される追加のフィールドは読み込まれません。私が模倣しようとしているcurlコマンド:

curl -v -u user:password -X POST -F 'properties={"filename":"maurizio.png"}' -F "file=@maurizio.png" 192.168.59.103:8080/testdb/mybucket.files

リクエストのコードは次のとおりです。

url = "http://192.168.59.103:8080/testdb/mybucket.files"
content_type = "multipart/form-data"

params = {"filename":"maurizio.png"}
params["_id"] = "test_hash_1234" 

data = open('maurizio.png','rb').read()

files = {'file': ('maurizio.png',data,content_type,params)}               
request = requests.post(url,files=files,auth=('user','password'))

このファイルは、mongodb の restheart api にロードされます。「_id」は、データベースがオブジェクトを参照するために使用する特別なオブジェクト ID です。ファイル名などの他のドキュメント フィールドに加えて、そのドキュメント フィールドを指定する必要があります。ファイルは、gridfs と呼ばれる Mongo の BLOB データストアにアップロードされます。curl を使用してデータと追加のドキュメント フィールドをアップロードできますが、上記の「リクエスト」コードはデータのみをアップロードし、追加のドキュメント フィールドはアップロードしません。クエリを実行するには、これらの追加フィールドが必要です。

-F フラグを python の requests モジュールと同等のものに変換するのを手伝ってくれる人はいますか? ありがとう!

4

2 に答える 2

2

マニュアルの例をチェックしてください:

files = {'file': ('report.xls', open('report.xls', 'rb'))}
r = requests.post(url, files=files)

最初にデータではなくファイルを渡す必要があることに注意してください(read()ファイルのコンテンツを渡す必要はありません。ファイルオブジェクトを渡すだけで済みます)

于 2015-08-13T00:07:13.483 に答える
0

ちなみに、Python で RESTHeart にアクセスする基本的な例を示すGithub リポジトリもあります。

目的は、Python とrequests ライブラリを使用して簡単な RESTful 呼び出しを行う方法を示すことでした。プル リクエストにもっとケースを追加して投稿するか、既存のテストが役立つかどうかを確認してください。

于 2015-09-09T13:20:42.663 に答える