如何批量上传Couchdb附件?

时间:2011-12-16 21:02:10

标签: rest couchdb attachment appcelerator bulk

我正在将我的sqlite数据库转换为Couchdb。我可以转换数据库并上传到Couchdb服务器。除了图像之外的一切。我想将图像作为独立附件上传,我想使用javascript,REST和xhr批量执行此操作。

POST http://127.0.0.1:5984/database/_bulk_docs

Data : {"_id": "701", "_attachments": {"555_image.png": { "content_type": "image/jpg","data":[object TiFilesystemFile]      }}}

我已经过CURLed单个文件进行测试并且有效。我该如何批量生产?

这是使用Appcelerator Titanium开发的iOS应用程序。

2 个答案:

答案 0 :(得分:1)

您应该能够调整单个文件,并执行以下操作:

POST http://127.0.0.1:5984/database/_bulk_docs

数据为:

{
  "docs": [
    {"_id": "701", "_attachments": {"555_image.png": { "content_type": "image/jpg","data":[object TiFilesystemFile] }},
    {"_id": "702", "_attachments": {"556_image.png": { "content_type": "image/jpg","data":[object TiFilesystemFile] }},
    {"_id": "703", "_attachments": {"557_image.png": { "content_type": "image/jpg","data":[object TiFilesystemFile] }},
  ]
}

但是,根据附件的数量和大小,您可能会遇到问题。简单地循环并一次执行一个可能更好;或者至少在合理大小的批次中。

答案 1 :(得分:0)

一个简单的解决方法..首先将所有数据导出为ex​​cel。然后创建一个列,该列将具有为每个文档执行curl语句所需的确切URL(在excel中,每个文档都有行)。 执行图像上传的简单curl语句:

curl -v -X PUT "http://username:password@serverip:portno/dbname/doc_id/image.JPG?rev=revisionid" --data-binary @image.JPG -H "Content-Type:image/jpg"

在构建curl所需的各个url之后,在excel中非常容易,将整个构建的url列复制到文本文件中,并将文本文件放在要上载的图像所在的位置。然后创建一个bash脚本,将读取所有行,并继续将图像发布到couchdb服务器: bash脚本

#!/bin/bash
while read line
do
        curl -v -X PUT $line
done < test.txt

在我的情况下,所有url行都出现在test.txt文件中。

这种方法对我来说完美无缺,图像的大小约为60-65kb,但有380个文档。不确定大文件会发生什么。