3

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

4

1 回答 1

4

对象的 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

如果您将存储桶配置为公共存储桶,则不需要进行身份验证。

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

正如您所提到的,预身份验证请求 (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 的预签名 URL 以生成(不涉及 API)无需额外身份验证即可工作的 URL。

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

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

于 2020-11-04T18:45:54.047 回答