我正在将我的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] }}}
我已经卷曲了一个文件来测试,这是有效的。我怎么做散装货?
这是一个使用Appcelerator Titanium开发的iOS应用程序。
您应该能够调整您的单个文件,并做如下操作:
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] }},
]
}
但是,根据附件的数量和大小,您可能会遇到问题。简单地循环并一次执行一个可能会更好;
一个简单的工作…首先导出所有数据到excel。然后创建一个列,其中包含执行每个文档的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个文档。不知道大文件会怎么样