2016-01-21 41 views
0

我正在構建將文件存儲到FIWARE對象存儲中的應用程序。 我不太明白什麼是將文件存儲到存儲的正確方法。將數據存儲在FIWARE對象存儲中

下面從Object Storage - User and Programmers Guide採取的代碼Python代碼片段展示了2種方式做這件事的:

def store_text(token, auth, container_name, object_name, object_text): 
    headers = {"X-Auth-Token": token} 

    # 1. version 
    #body = '{"mimetype":"text/plain", "metadata":{}, "value" : "' + object_text + '"}' 

    # 2. version 
    body = object_text 

    url = auth + "/" + container_name + "/" + object_name 

    return swift_request('PUT', url, headers, body) 

1版混淆了我,因爲當我第一次看到的唯一的Node.js模塊(回購:fiware-object-storage)與Object Storage一起使用,似乎使用1.版本。由於該模塊正在調用舊的(v.1.1)API版本,而不是推測最新的(v.2.0),所以引用python示例時,不確定這是否是過時的版本。


當我與模塊打得比較,意識到它沒有工作,它的代碼是一團糟。所以我分叉了這個項目,很快就明白了,我將需要從頭開始重新編寫它,並將使用指南中提到的上述python示例作爲參考。 Link to my repo

在寫這個時,唯一沒有實現的方法是對象存儲(PUT)和對象獲取(GET)。


有大約我送到[email protected]對象存儲一些另外的問題,但沒有聽到任何回來,要求他們在這裏。

  1. 沒有太多的編寫API庫的經驗。 我是否需要擔心驗證令牌過期?我認爲每次我們與存儲進行交互時都不需要進行新的身份驗證。當服務器啓動時(我們創建一個實例),它在內部保存它,認證應該發生一次。 我是否應該實施某種刷新令牌的機制?

  2. 租戶ID是否更改?從下面的引用假設獲得一個租戶我只是一次處理,然後你可以在配置中使用它來減少身份驗證呼叫。

有效令牌,需要訪問一個對象存儲。本節 描述瞭如何使用與OpenStack Keystone兼容的身份管理系統 獲取有效令牌。如果已知 用戶名,密碼和租戶詳細信息,則只需要步驟3是 。源

  • 在認證過程中獲取的租戶應該怎麼選擇「右」之一,當?現在我只是採取第一個類似的例子代碼。

  • 確實對象存儲容器只屬於一個區域嗎?只調用什麼版本2.

  • +0

    Renārs嗨,我是WireCloud的主要開發者,我是讀你的問題,因爲你所用的'fiware,wirecloud '標籤,但我沒有看到任何關係。我建議你刪除'fiware-wirecloud'標籤;-) –

    +0

    對不起,現在修復它。 –

    回答

    0

    使用忽略你的版本1.在示例中註釋掉。它應該從文檔中刪除。

    (1)令牌在一段時間內有效。這可能是一個小時或一天,具體取決於設置。這段時間應該在認證服務返回的令牌中指定。令牌需要定期更新。

    (2)租戶ID不變。

    (3)通常只返回一個tenant id。但是,有可能您被分配了多個ID,在這種情況下,您必須選擇您當前使用的是哪一個。容器通常屬於單個租戶,不在租戶之間共享。

    (4)集裝箱通常限於一個區域。未來,當將一個容器的多區域支持添加到Swift時,這可能會發生變化。

    +0

    感謝您的回答。但如果我在對象存儲器中存儲圖像,則需要使用2.版本,我應該如何保存它? BASE64?並且在獲取它時,我怎樣才能得到它是一個圖像,例如容器可能包含jpegs和png。如何指定上傳時對象的MIME時間? –

    +0

    以普通二進制格式上傳PUT請求,並使用「Content-Type」標題指定MIME類型。 –

    +0

    但是,當提取文件大概我需要知道什麼是我願意接受的標題?將mimetype與文件名一起保存到數據庫中? –