Java 使用openstack4j获取上传的对象URL
目前,我正在使用openstack4j将对象放入一个公开可读的容器中。上传效果很好(我可以通过拼接来获取对象的URL),但如果可能的话,我希望能够直接从库中获取上传对象的公共URL 通过查看文档,我找到了ObjectLocation,但这只提供了对象的路径组件,而不是完整的URL。我有没有办法使用openstack4j获取对象的完整URL 我上传文件的代码是:Java 使用openstack4j获取上传的对象URL,java,scala,openstack,Java,Scala,Openstack,目前,我正在使用openstack4j将对象放入一个公开可读的容器中。上传效果很好(我可以通过拼接来获取对象的URL),但如果可能的话,我希望能够直接从库中获取上传对象的公共URL 通过查看文档,我找到了ObjectLocation,但这只提供了对象的路径组件,而不是完整的URL。我有没有办法使用openstack4j获取对象的完整URL 我上传文件的代码是: os.objectStorage.objects.put(containerName, objectName, Payloads.cre
os.objectStorage.objects.put(containerName, objectName, Payloads.create(someFile))
注意:我实际上是在scala中使用openstack4j,但这并不重要。如果您使用的是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
的一个实例。
您应该查找凭证中提到的地区(在我的例子中是“达拉斯”)
获得此端点的url后,可以使用它为对象创建url:
objectUrl + "/" + containerName + "/" + objectName
这将导致(例如,它不链接到实际对象):
这很有效。我的最终解决方案(在Scala中)是:
os.getToken.getCatalog.filter([uu.getName==“swift”).flatMap([uu.getEndpoints.toList”).find(e=>e.getRegion==“dallas”和&e.getIface==faceting.PUBLIC)。map(e=>s“${e.getUrl.toString}${ObjectLocation.create(container,objectName.getURI}”)
https://dal.objectstorage.open.softlayer.com/v1/AUTH_2440e4fa175452cb2e14506cb5d63ec/MyContainer/uploadedOpbject.jpg