2012-03-05 91 views
3

我正在編寫像應用程序的cms,我希望我的圖像作爲附件存儲在couchdb中。 問題在於命名附件,因爲我不希望我的圖像命名相同(例如/db/doc_id/thumb.jpg)couchdb,如何重命名附件

理想情況下,附件名稱應取決於doc.name字段。爲了完成這項工作,每次用戶更改當前照片文檔的名稱(description | alt)時,都必須重命名附件。

所以我的問題是:如何更改附件名稱?或者我應該以其他方式解決我的問題?

回答

2

Szymon,

我建議使用UUID的文件名稱考慮,並存儲附件的東西「靜態」的,如「原創」,「拇指」 ,「300wide」等。用戶在上傳文件時提供的名稱可以存儲爲關鍵字,您可以使用MapReduce索引稍後使用該名稱檢索圖像/文件。

但是,如果你走這條路線,你將不得不面對「重複」問題有點不同 - 因爲你可以很容易地用相同的用戶提供的名稱多次上傳同一圖像,沒有衝突。

儘管如此,取決於你建立的是什麼,讓用戶提供一個唯一的名字通常是不明智的 - 例如Flickr(其中包括許多其他的)。

如果確實需要將doc_id ==作爲用戶給出的名稱,那麼將附件存儲在靜態名稱下仍然是明智的,因此您不必更新附件名稱。最後,如果您覺得自己確實必須更改附件名稱(並且確實存在您需要的情況),最簡單的方法是從舊位置(或文檔)獲取附件,然後將其作爲附件新名稱,並用舊名稱刪除附件。

希望有幫助!

+0

GET/PUT/DELETE序列是否需要附件的MIME類型PUT?我怎麼得到這個? (我知道的唯一方法是獲取文檔並查看_attachments字段中附件存根的屬性,但是如果附件很多,這看起來像是太多開銷。) – 2013-02-27 18:43:41

+0

如果您知道附件的名稱,你可以使用HEAD請求來獲得它的MIME類型。如果你不這樣做,你可以使用MapReduce來構建所有_attachments及其MIME類型的索引。然後使用該結果作爲GET/PUT/DELETE運行的基礎。 – BigBlueHat 2013-03-06 13:49:21

0

使用此命令>

curl -v http://localhost:5984/database/DocumentID/OldFileName?rev=RevisionID -X MOVE -H "Destination: NewFileName" 
+1

MOVE僅被CouchDB簡要支持,並在0.9發佈之前被刪除:http://wiki.apache.org/couchdb/HTTP_Document_API#MOVE – BigBlueHat 2012-07-02 16:03:31