目前我正在使用openstack4j将对象放入公共可读容器中。上传工作正常(我可以通过拼凑它来获取对象的URL),但我希望能够直接从库中获取上传对象的公共URL(如果可能)。
浏览文档我发现了ObjectLocation,但这只给了我对象的路径组件而不是完整的URL。有没有办法让我使用openstack4j获取对象的完整URL?
我上传文件的代码是:
os.objectStorage.objects.put(containerName, objectName, Payloads.create(someFile))
注意:我实际上是在scala中使用openstack4j,但这并不重要。
答案 0 :(得分:1)
如果您使用的是OpenStack4j 3.0.X和Openstack Identity API v3,则可以使用此代码获取对象存储(swift)端点URL:
for (Service s : os.getToken().getCatalog()) {
if (s.getName().equals("swift")) {
for (Endpoint e : s.getEndpoints()) {
if (e.getRegion().equals("dallas") && e.getIface().equals(Facing.PUBLIC)) {
objectUrl = e.getUrl().toString();
}
}
}
}
其中os
是org.openstack4j.api.OSClient.OSClientV3
的实例。
您应该查找凭证中提到的区域(在我的例子中是“dallas”)。
获得此端点的网址后,您可以使用它创建对象的网址:
objectUrl + "/" + containerName + "/" + objectName
这将导致(仅作为示例,它不链接到实际对象):
https://dal.objectstorage.open.softlayer.com/v1/AUTH_2440e4fa175452cb2e14506cb5d63ec/MyContainer/uploadedOpbject.jpg