使用 oci-java-sdk 获取存储桶或对象的 URL

Getting the URL for a bucket or an object using oci-java-sdk

我已经有一个代码可以使用 oci-java-sdk 检索存储桶中的对象,并且按预期工作。我想检索上传到对象存储桶中的文件的 URL,当我使用这个 URL 时,这应该重定向到实际位置而不询问任何凭据。 我看到了预先验证的请求,但我又需要再创建一个请求。我不想再发送一个请求,而是想在现有的 GetObjectResponse. 中获取 URL 任何建议> 谢谢, js

对象的 URL 不是从 API 返回的,但可以使用您知道的信息构建(请参阅下面的更新!)。模式是:

https://{api_endpoint}/n/{namespace_name}/b/{bucket_name}/o/{object_name}

访问 URL 将(通常,见下文)需要身份验证。我们的身份验证机制描述于:

https://docs.cloud.oracle.com/en-us/iaas/Content/API/Concepts/signingrequests.htm

如果将存储桶配置为 Public 存储桶,则不需要身份验证。

https://docs.cloud.oracle.com/en-us/iaas/Content/Object/Tasks/managingbuckets.htm?TocPath=Services%7CObject%20Storage%7C_____2#publicbuckets

如您所述,Pre-authenticated 请求 (PAR) 是一种选择。一般这种情况都会用到,效果很好

https://docs.cloud.oracle.com/en-us/iaas/Content/Object/Tasks/usingpreauthenticatedrequests.htm

严格来说,也可以使用我们的 Amazon S3 Compatible API...

https://docs.cloud.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm

...和 ​​S3 的预签名 URLs 生成(不涉及 API)一个 URL 无需额外身份验证即可工作。

https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html

更新:一位队友指出 Java 的 OCI SDK 现在包含一个 getEndpoint 方法,可用于在查询对象存储时获取所需的主机名 API . https://docs.cloud.oracle.com/en-us/iaas/tools/java/1.25.3/com/oracle/bmc/objectstorage/ObjectStorage.html#getEndpoint--