2011-10-20 13 views
8

私は、文書が作成されると、コマンド・ラインから、1 /複数の添付ファイル(複数可)を添付することができるようにしたいPROBLEMCouchDBのオンザフライ添付ファイル

(下記参照) 。私はこれをFuton(Couchbase)で働かせることしかできませんが、文書がすでに作成された後でなければなりません。

私は次のことを試してみました:

curl -X PUT 'http://username:[email protected]:5984/client_info' 

curl -X POST 'http://username:[email protected]:5984/client_info' -H 'Content-Type: application/json' -d '{"client_type": "Private", "client_name": "John Doe","client_email": "[email protected]","client_city": "Toronto","created_at": "2011-09-06 12:45:03","expires_at": "2012-01-01 00:00:00", "_attachments": { 
    "test01.jpg": { 
     "content_type": "image/jpeg", 
     "length": 30189   
    } 
    } 
}' 

次のエラーでこれだけの結果:

{"error":"unknown_error","reason":"function_clause"} 

おかげ

答えて

16

は、あなたが実際にを含む、別のステップであなたの添付ファイルをアップロードする必要があります要求本体の添付ファイル。だから最初にあなたの通常の文書を作成し、ファイルをアップロードする別の要求を発行します。ここでは、カール(http://guide.couchdb.org/draft/api.html#attachments)を使用して、添付ファイルをアップロードする方法の例です:curl -v -X PUT http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg?rev=2-2739352689 --data-binary @artwork.jpg -H "Content-Type: image/jpg"

そして、ここでは、添付ファイルのための公式のAPIです:http://wiki.apache.org/couchdb/HTTP_Document_API#Standalone_Attachments

+0

だから私は最初にドキュメントを作成し、_revを取得してからPUTを使って最終的に画像を添付する必要がありますか? これを同時に行うことができないのはなぜですか? 入力したい情報が、ユーザーが1つ以上の画像をアップロードすることができる登録フォームのものであればどうなりますか?これをどうやってやりますか? – EdvardG

+0

バケットのようなものに並行して書き込むバイナリオブジェクト用のスケーラブルなストレージを探しているなら、CouchDBが最初の選択肢ではないかもしれません。 問題にはまだいくつかの回避策があります。アップロードされたイメージのローカルコピーをローカルに保存し、それらを順次アップロードするためにキューに入れます。あるいは、各イメージを別々のドキュメントに保存して(パラレルアップロードを許可する)、イメージドキュメントの_idsをユーザードキュメントに追加するだけです。 1つのリクエストですべてを行うには:画像をBase64エンコードして、JSON(パフォーマンス面では醜い)にイメージを組み込みます。 –

+0

エラーが発生した場合:「一致するものは見つかりません:...」URLを引用符で囲みます: curl -v -X PUT 'http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg? rev = 2-2739352689 '--data-binary @ artwork.jpg -H "Content-Type:image/jpg" – Andriy

2

添付ファイルを文書の作成と同じリクエストでアップロードする方法です。

curl -X POST 'http://user:[email protected]:5984/client_stuff' -H 'Content-Type: application/json' -d '{"stuff": "stuff", "_attachments": { 
    "empty.gif": { 
     "content_type": "image/gif", 
     "data": "'$(openssl base64 < file.gif)'" 
    } 
    } 
}' 

使用状況によっては、Base64エンコーディングがそれほど悪くない可能性があります。

さらに詳しい情報:http://wiki.apache.org/couchdb/HTTP_Document_API#Inline_Attachments

5

これは私のために動作し、少しシンプルなようです。最初のものは、revを追加しないと、docを作成するときでなければなりません。私の例では、データベース "test1"を使用しています。

$ curl -H "Content-Type: image/jpeg" -X PUT --data-binary @test01.jpg 'http://username:[email protected]:5984/test1/client_info/test01.jpg' 

{"ok":true,"id":"client_info","rev":"1-8584b6af9d0c3347ba08202697f09952"} 

$ curl -H "Content-Type: image/jpeg" -X PUT --data-binary @test02.jpg 'http://username:[email protected]:5984/test1/client_info/test02.jpg?rev=1-8584b6af9d0c3347ba08202697f09952' 

{"ok":true,"id":"client_info","rev":"2-623b94aba30944d6744f5c11cf03fc10"} 
+0

私によく見えます。 – span

関連する問題