我已经有一个代码可以使用 oci-java-sdk 检索存储桶中的对象,并且按预期工作。我想检索上传到对象存储中的存储桶的文件的 URL,当我使用此 URL 时,它应该重定向到实际位置而不询问任何凭据。我看到了预先验证的请求,但我需要再创建一个请求。我不想再发送一个请求并想在现有的GetObjectResponse 中获取 URL。 任何建议>谢谢,js
1 回答
对象的 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
如果您将存储桶配置为公共存储桶,则不需要进行身份验证。
正如您所提到的,预身份验证请求 (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--