使用 openstack4j 获取上传的对象 URL

Get uploaded object URL using openstack4j

目前我正在使用 openstack4j 将对象放入 public 可读容器中。上传工作正常(我可以通过将对象拼凑在一起来获得对象的 URL ),但我希望能够直接从中获得上传对象的 public URL如果可能的话图书馆。

通过文档我找到了 ObjectLocation,但这只给我对象的路径部分而不是完整的 URL。我有什么办法可以使用 openstack4j 获取对象的完整 URL 吗?

我上传文件的代码是:

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

注意:我实际上是在 scala 中使用 openstack4j,尽管这应该无关紧要。

如果您使用的是 OpenStack4j 3.0.X 和 Openstack Identity API v3,您可以使用此代码获取 object-storage (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")。

获得此端点的 url 后,您可以使用它为您的对象创建 URL:

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

这将导致(作为示例,它不会 link 实际对象):

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