我正在将我的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应用程序。
答案 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)
一个简单的解决方法..首先将所有数据导出为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个文档。不确定大文件会发生什么。