0

我正在尝试对我上传update的一些对象的数据进行标头。Rackspace示例标头attribute如:X-Object-Meta-name

但要做到这一点,目前我需要从下载的对象中下载object整个parse对象header。然后根据需要进行一些检查和更新,然后再次上传对象。但这使得更新过程非常缓慢。

有没有办法只下载headeran 的一部分object并单独更新它?提前致谢!

4

2 回答 2

0

https://github.com/jclouds/jclouds/blob/master/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/features/ObjectApi.java#L207

如果你给它一个带有“名称”->“更新的标头值”的映射,它应该更新标头并自动添加 x-object-meta- 前缀。

于 2015-04-20T18:26:09.213 回答
0

有没有办法只下载对象的标题部分并单独更新它?

我不是 Java 开发人员,但 Cloud Files API 是 RESTful 的,所以我将提供使用 curl 的示例。如果您使用的是库,那么您可能希望编辑您的问题以包含哪个库,因为其中许多库抽象了这些操作,并且可以在该库的上下文中提供更好的答案。

要下载没有对象内容的标头,请执行 HTTP HEAD 请求。

$ curl -I -XHEAD -H'X-Auth-Token:******' \
> https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_******/container/object
HTTP/1.1 200 OK
Content-Length: 400
Accept-Ranges: bytes
Last-Modified: Tue, 21 Apr 2015 12:06:23 GMT
Etag: 81dc9bdb52d04dc20036dbd8313ed055
X-Timestamp: 1429617982.70468
X-Object-Meta-Foo: Bar
Content-Type: text/html
X-Trans-Id: txd337e4634c98475baf1a4-0055363d42dfw1
Date: Tue, 21 Apr 2015 12:06:26 GMT

要仅更新对象上的标头,您可以执行 HTTP POST 请求。

$ curl -i -XPOST -H'X-Auth-Token:******' \
> -H'X-Object-Meta-Foo: Bar' \
> -H'X-Object-Meta-Foo2: Bar2' \
> https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_******/container/object
HTTP/1.1 202 Accepted
Content-Length: 76
Content-Type: text/html; charset=UTF-8
X-Trans-Id: txc262dfe86727440cbfcb1-0055363d5cdfw1
Date: Tue, 21 Apr 2015 12:06:53 GMT

<html><h1>Accepted</h1><p>The request is accepted for processing.</p></html>

执行另一个 HEAD 请求将显示两个标头现在都存在。

$ curl -I -XHEAD -H'X-Auth-Token:******' \
> https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_******/container/object
HTTP/1.1 200 OK
Content-Length: 400
Accept-Ranges: bytes
Last-Modified: Tue, 21 Apr 2015 12:06:53 GMT
Etag: 81dc9bdb52d04dc20036dbd8313ed055
X-Timestamp: 1429618012.98354
X-Object-Meta-Foo: Bar
X-Object-Meta-Foo2: Bar2
Content-Type: text/html
X-Trans-Id: txdd9365b54e8f4d8c8451d-0055363d6adfw1
Date: Tue, 21 Apr 2015 12:07:06 GMT
于 2015-04-21T12:22:19.647 回答