2011-10-20 17 views
8

समस्याCouchDB ऑन-द-मक्खी कमांड लाइन के माध्यम से संलग्नक

मैं एक/एकाधिक लगाव (रों) के रूप में दस्तावेज़ कमांड लाइन के माध्यम से बनाया जाता है, संलग्न करने के लिए सक्षम होना चाहते हैं (नीचे देखें) । मैं इसे केवल फ़्यूटन (कोचबेस) में काम करने के लिए प्राप्त कर सकता हूं, लेकिन केवल एक दस्तावेज़ के बाद ही बनाया जा चुका है।

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

आप एक अलग चरण में अपने लगाव अपलोड करनी होगी, वास्तविक युक्त अनुरोध निकाय में अनुलग्नक फ़ाइल। तो पहले अपना नियमित दस्तावेज़ बनाएं, फिर एक और अनुरोध जारी करें जहां आप फ़ाइल अपलोड करते हैं। 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"

यहाँ और अनुलग्नकों के लिए सरकारी एपीआई है: यहाँ कैसे कर्ल (http://guide.couchdb.org/draft/api.html#attachments) का उपयोग कर एक अनुलग्नक अपलोड करने के लिए पर एक उदाहरण है http://wiki.apache.org/couchdb/HTTP_Document_API#Standalone_Attachments

+0

तो मुझे पहले दस्तावेज़ बनाने, _rev प्राप्त करने और फिर अंततः एक छवि संलग्न करने के लिए PUT का उपयोग करने की आवश्यकता है? एक साथ ऐसा करना क्यों संभव नहीं है? क्या होगा यदि मैं जो जानकारी इनपुट करना चाहता हूं वह पंजीकरण फ़ॉर्म से है, जहां उपयोगकर्ता के पास एक या अधिक चित्र अपलोड करने की क्षमता है? मैं ऐसा कैसे कर पाऊंगा? – EdvardG

+0

यदि आप बाइनरी ऑब्जेक्ट्स के लिए अत्यधिक स्केलेबल स्टोरेज की तलाश में हैं जो एक बाल्टी की तरह कुछ लिखते हैं, तो कॉच डीबी आपकी पहली पसंद नहीं हो सकती है। आपकी समस्या के लिए अभी भी कई कामकाज हैं: अपलोड की गई छवियों की स्थानीय प्रतियों को स्थानीय रूप से स्टोर करें और अनुक्रमिक अपलोड के लिए उन्हें कतार दें। वैकल्पिक रूप से, प्रत्येक छवि को एक अलग दस्तावेज़ में स्टोर करें (समांतर अपलोड की अनुमति देता है), और केवल अपने उपयोगकर्ता दस्तावेज़ में छवि दस्तावेज़ों के _ids जोड़ें। एक अनुरोध में सबकुछ करने के लिए: बेस 64-अपनी छवियों को एन्कोड करें और उन्हें अपने दस्तावेज़ JSON (प्रदर्शन के संदर्भ में बदसूरत) में शामिल करें। –

+0

यदि आपको कोई त्रुटि मिलती है: "कोई मिलान नहीं मिला: ..." यूआरएल को उद्धरण में डाल दें: curl -v -X PUT 'http://127.0.0.1:52984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg? rev = 2-2739352689 '--डेटा-बाइनरी @ artwork.jpg -H "सामग्री-प्रकार: छवि/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)'" 
    } 
    } 
}' 

आपके उपयोग के मामले के आधार पर, बेस 64-एन्कोडिंग इतना खराब नहीं हो सकता है।

और जानकारी: http://wiki.apache.org/couchdb/HTTP_Document_API#Inline_Attachments

5

यह मेरे लिए काम करता है, और एक छोटे से सरल लगता है। दस्तावेज़ बनाने के दौरान सबसे पहले होना चाहिए, यदि आप कोई संशोधन नहीं जोड़ते हैं। मेरे उदाहरण डेटाबेस "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

संबंधित मुद्दे