2016-01-21 121 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与文件名一起保存到数据库中? –