使用openstack4j获取上传的对象URL

时间:2016-11-02 16:35:59

标签: java scala openstack

目前我正在使用openstack4j将对象放入公共可读容器中。上传工作正常(我可以通过拼凑它来获取对象的URL),但我希望能够直接从库中获取上传对象的公共URL(如果可能)。

浏览文档我发现了ObjectLocation,但这只给了我对象的路径组件而不是完整的URL。有没有办法让我使用openstack4j获取对象的完整URL?

我上传文件的代码是:

os.objectStorage.objects.put(containerName, objectName, Payloads.create(someFile))

注意:我实际上是在scala中使用openstack4j,但这并不重要。

1 个答案:

答案 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();
                    }
                }
            }
        }

其中osorg.openstack4j.api.OSClient.OSClientV3的实例。 您应该查找凭证中提到的区域(在我的例子中是“dallas”)。

获得此端点的网址后,您可以使用它创建对象的网址:

objectUrl + "/" + containerName + "/" + objectName

这将导致(仅作为示例,它不链接到实际对象):

https://dal.objectstorage.open.softlayer.com/v1/AUTH_2440e4fa175452cb2e14506cb5d63ec/MyContainer/uploadedOpbject.jpg