2011-12-16 67 views
4

我將我的sqlite數據庫轉換爲Couchdb。我可以將數據庫轉換並上傳到Couchdb服務器。一切,但圖像。我想上傳圖像作爲獨立附件,我想用JavaScript,REST和xhr批量處理。如何批量上傳Couchdb附件?

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應用程序。

回答

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] }}, 
    ] 
} 

但是,根據附件的數量和大小你可能會遇到問題。簡單地循環並一次完成一個可能會更好;或者至少在合理大小的批次中。

0

一個簡單的解決方法。先將所有數據導出爲ex​​cel。然後創建一個列,其中包含爲每個文檔執行curl語句所需的確切url(在excel中,每個文檔都會有行)。 簡單的捲曲語句執行的圖片上傳:

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

建立了捲曲所需的單獨的URL,這將是在Excel中很容易的,在一個文本文件複製建立了包含整個網址列,把文本後文件要上傳的圖像。然後創建一個bash腳本來將讀取所有的線路和不斷張貼圖片到CouchDB的服務器: bash腳本

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

在我的情況下,所有的URL行存在於test.txt文件。

這種方法對我來說完美無瑕,圖像的大小約爲60-65kb,儘管有380個文檔。不知道大文件會發生什麼。