我试图在使用jclouds将我的对象PUT上传到我的Swift环期间设置一个对象到期,以便在指定的日期/时间从Swift中删除对象。
我可以使用cURL手动执行此操作,并将对象转换为具有过期日期的Swift。这会使用 X-Delete-At 或 X-Delete-After 标头。有关这些标题的详细信息,请参阅openstack docs 1和openstack docs 2。
然而,我没有运气通过jclouds做同样的事情。通过jclouds快速搜索没有出现任何一个X-Delete-标题,所以我的假设是不直接支持,除非在消息有效负载中手动设置这些标题。
澄清一点:这些标头不能设置为对象用户元数据。例如,在对象上设置 X-Delete-At 的用户元数据键将生成 X-Object-Meta-x-delete-at 形式的标题, swift不会将其识别为对象过期。
我试图找出是否有办法将自定义标头添加到HTTP PUT操作(而不是用户元数据)来执行此操作。使用cURL,就像添加:
一样简单 -H "X-Delete-After:60"
to the cURL command for the PUT operation (i.e., expire the object in 60 seconds). I assume the same can be done with jclouds. This is what I have so far:
public String writeToStore(String name, InputStream payload) {
BlobStore bs = prepareContext().
getBlobStore();
Blob b = bs.
blobBuilder(name).
// userMetadata(mymeta).
payload(payload).
contentType("image/jpeg").
build();
// Get current headers
Multimap<String,String> headers = b.getAllHeaders();
// Add new header & set expire date to 1 year in the future (seconds since epoch)
headers.put("X-Delete-At", "1418148027");
// Set headers including new header just added
b.setAllHeaders(headers);
return bs.putBlob(containerName, b);
}
尽管在此处添加了 X-Delete-At 标题,但它似乎没有效果。我没有看到Wireshark捕获数据包中出现 X-Delete-At 标题。
感谢任何帮助。谢谢!
答案 0 :(得分:1)
jclouds目前不支持这个,但我提出了一个将BlobBuilder.expires映射到X-Delete-At的提交:
https://github.com/jclouds/jclouds/pull/227
您可以在此测试并打开JIRA问题:
https://issues.apache.org/jira/browse/JCLOUDS
谢谢!