目前,我正在使用openstack4j将对象放入一个可公开读取的容器中。上传很好(我可以通过拼凑得到对象的URL ),但如果可能的话,我希望能够直接从库中获得上传对象的公共URL。
查看一下我发现的ObjectLocation文档,但这只会给出对象的路径组件,而不是完整的URL。有什么方法可以让我使用openstack4j获取对象的完整URL吗?
我上传文件的代码是:
os.objectStorage.objects.put(containerName, objectName, Payloads.create(someFile))注意:我实际上是在scala中使用openstack4j,尽管这并不重要。
发布于 2017-02-07 13:09:20
如果您使用的是OpenStack4j 3.0.X和Openstack Identity API v3,您可以使用以下代码获取对象存储端点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的一个实例。您应该寻找在您的凭据中提到的区域(在我的例子中是“达拉斯”)。
一旦您拥有了这个端点的url,就可以使用它为您的对象创建url:
objectUrl + "/" + containerName + "/" + objectName这将导致(例如,它没有链接到实际对象):
https://dal.objectstorage.open.softlayer.com/v1/AUTH_2440e4fa175452cb2e14506cb5d63ec/MyContainer/uploadedOpbject.jpghttps://stackoverflow.com/questions/40385145
复制相似问题