CouchDB Приложения на лету через командную строку - PullRequest
8 голосов
/ 20 октября 2011

ПРОБЛЕМА

Я хочу иметь возможность прикреплять одно / несколько вложений при создании документа через командную строку (см. Ниже). Я могу заставить это работать только в Futon (Couchbase), но только после того, как документ уже создан.

Я пробовал следующее:

curl -X PUT 'http://username:password@localhost:5984/client_info'

curl -X POST 'http://username:password@localhost:5984/client_info' -H 'Content-Type: application/json' -d '{"client_type": "Private", "client_name": "John Doe","client_email": "john@doe.com","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"}

Спасибо

Ответы [ 3 ]

16 голосов
/ 20 октября 2011

Вы должны загрузить свое вложение в отдельном шаге, содержащем фактический файл вложения в теле запроса. Поэтому сначала создайте свой обычный документ, а затем отправьте еще один запрос на загрузку файла. Вот пример того, как загрузить вложение с помощью curl (http://guide.couchdb.org/draft/api.html#attachments): curl -v -X PUT <a href="http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg?rev=2-2739352689">http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg?rev=2-2739352689</a> --data-binary @artwork.jpg -H "Content-Type: image/jpg"

А вот официальный API для вложений: http://wiki.apache.org/couchdb/HTTP_Document_API#Standalone_Attachments

5 голосов
/ 13 декабря 2012

Это работает для меня, и кажется немного проще.Первый должен быть при создании документа, если вы не добавляете версию.В моих примерах используется база данных "test1".

$ curl -H "Content-Type: image/jpeg" -X PUT --data-binary @test01.jpg 'http://username:password@localhost: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:password@localhost:5984/test1/client_info/test02.jpg?rev=1-8584b6af9d0c3347ba08202697f09952'

{"ok":true,"id":"client_info","rev":"2-623b94aba30944d6744f5c11cf03fc10"}
2 голосов
/ 07 сентября 2012

Вот способ загрузить вложение в том же запросе, что и при создании документа.

curl -X POST 'http://user:pass@localhost: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

...