2013-07-02 45 views
2

我存儲圖像文件,在Azure存儲與以下命名約定的斑點:分隔符在Azure Blob存儲中如何工作?

directory/image-name 

當試圖在Javascript使用BlobService.listBlobs(container, options, callback)在服務器上檢索的斑點,我用:

var options = { "prefix":directory } 

和正如我所料,它只能得到以目錄名稱開頭的blob,但我認爲我也能夠使用:

var options = { "delimiter":"/", "prefix":directory } 

並找回相同的斑點,可能沒有名稱中的前綴。相反,我什麼也沒得到。什麼是使用分隔符的正確方法?如果只使用前綴獲得想要的項目,那麼它有什麼意義?

+0

我正確理解你在使用node.js嗎? –

+0

這是正確的。 – Curyous

回答

1

我沒有使用從JavaScript的REST API的,但我認爲你缺少的是目錄名稱之後的斜線,所以我建議:

var options = { "delimiter":"/", "prefix":directory+"/" } 

的Windows Azure存儲並沒有真正有在底層實現中,容器中的所有blob都只是扁平列表,blob名稱(不是容器名稱)可能包含斜槓。分隔符是調用ListBlobs REST API時的一個選項,它允許您模擬類似目錄的行爲。如果啓用了分隔符選項,並且通過前綴的blob名稱部分包含分隔符,則回覆將省略表示blob。

爲了說明,讓我們列舉一些斑點,假設所有的人都在同一個容器https://myaccount.blob.core.windows.net/mycontainer「:

a/b/extra.txt 
a/bloba.txt 
a/blobb.txt 
other.txt 

所以,這時如果你用前綴容器調用listBlobs‘A /’並沒有指定它會返回前三個名字,因爲它們都有「a /」前綴。

如果您調用帶有相同「/」前綴的listBlobs並將分隔符設置爲「/」,那麼您只能得到中間兩個名字;該服務留下了a/b/extra.txt,因爲它位於(模擬)子目錄「b」中。