1. 代码引入
<dependency>
<groupId>org.pacesys</groupId>
<artifactId>openstack4j</artifactId>
<version>2.0.9</version>
<classifier>withdeps</classifier>
</dependency>
2. 授权
Eg:
OSClient os =OSFactory.builder()
.endpoint("http://192.168.137.140:5000/v2.0")
.credentials("username","userpassword").tenantName("tenantName")
.authenticate();
3. Account账户
一个账户也被称为一个project工程或者一个tenant租户。一个账户给出了容器和对象存在的安全范围。由于账户角色的愿意,与它相关的管理任务并不多。
3.1 获取账户详情
eg:
SwiftAccount account =os.objectStorage().account().get();
3.2 元数据metadata
3.2.1 创建或者更新一个账户的元数据:
boolean successful =os.objectStorage().account().updateMetadata(myMetadataMap);
3.2.2 删除一个账户的元数据:
boolean successful =os.objectStorage().account().deleteMetadata(myMetadataMap);
4. Containers容器
一个容器本章上就是一个存放对象的桶。
Containers can have access security assigned tothem, published against a CDN or be shared publicly.
4.1 容器的查询
列出当前账户的所有容器
List<? extendsSwiftContainer> containers = os.objectStorage().containers().list();
使用更进一步的条件查询
List<? extendsSwiftContainer> containers = os.objectStorage()
.containers()
.list(ContainerListOptions.create()
.startsWith("J")
.limit(100)
// ...
);
4.2 创建容器
// Simple
os.objectStorage().containers().create("myContainerName");
// Full control
os.objectStorage().containers().create("myContainer",CreateUpdateContainerOptions.create()
.accessAnybodyRead()
.accessWrite(acl)
.metadata(myMeta)
//...
); #### Updating a Container
更新容器信息与fullcontrol创建容器十分类似。唯一的不同就在于调用方法名称。简短示例:
os.objectStorage().containers().update("myContainer",CreateUpdateContainerOptions);
4.3 删除容器
注意:为了成功删除容器,必须在删除之前将他清空。这不是本代码的策略,而是openstack的限制就是如此。
os.objectStorage().containers().delete("myContainer");
4.4 创建伪目录
此功能可能由于你部署方式的配置不同而导致不支持。像Rackspace这样的供应商是开箱即支持的。
os.objectStorage().containers().createPath(containerName,"/my/nested/path");
4.5 元数据
读取
Map<String,String> md = os.objectStorage().containers().getMetadata(containerName);
创建及更新
boolean successful =os.objectStorage().containers().updateMetadata(containerName, myMetadataMap);
删除元数据
boolean successful =os.objectStorage().containers().deleteMetadata(containerName, myMetadataMap);
5. Objects对象
对象就是被上传的文件,证明或者伪目录。对象是与容器相关联的。
5.1 查询
列出一个容器的所有对象
List<? extendsSwiftObject> objs = os.objectStorage().objects().list(containerName);
使用更进一步的条件查询
List<? extendsSwiftObject> objs =os.objectStorage().objects().list(ObjectListOptions.create()
.startsWith("J")
.path("/art/digital")
// ...
);
5.2 创建对象
简单的
String etag =os.objectStorage().objects().put(containerName, objectName,Payloads.create(someFile));
高级的
String etag =os.objectStorage().objects().put(containerName, objectName,
Payloads.create(someFile),
ObjectPutOptions.create()
.path("/some/path")
.metadata(md)
// ...
);
5.3 删除对象
os.objectStorage().objects().delete(containerName,objectName);
5.4 复制对象
String etag =os.objectStorage().objects().copy(ObjectLocation.create(srcContainer,srcObject)
ObjectLocation.create(destContainer, destObject)
);
5.5 元数据
获取
Map<String,String> md = os.objectStorage().objects().getMetadata(containerName,objectName);
创建和更新
boolean successful =os.objectStorage().objects().updateMetadata(ObjectLocation.create(containerName,objectName), myMetadataMap);