OCI Java SDK通过预认证URL操作对象存储桶的问题排查
OCI Java SDK 预认证URL使用及问题解决
核心问题解答
1. 仅靠预认证URL、namespace和bucket name能否实现上传下载?
可以。OCI Java SDK支持通过**预认证请求(PAR)**完成对象存储的上传与下载操作,预认证URL本身已包含访问权限和有效期信息,无需完整的IAM身份认证凭证。
2. 是否有官方文档?
Oracle官方文档中包含预认证请求的详细使用说明,以及Java SDK对应的示例代码,涵盖上传、下载等常见操作。
3. 版本要求与所需依赖
- Java版本:支持Java 8及以上(你的环境使用Java 8符合要求)
- Maven版本:推荐3.5.0及以上
- 必要依赖:
除了对象存储核心SDK依赖,必须添加HTTP客户端实现依赖,错误日志已明确提示需要引入oci-java-sdk-common-httpclient-*系列中的一个,最常用的是Jersey客户端:<!-- OCI对象存储核心依赖 --> <dependency> <groupId>com.oracle.oci.sdk</groupId> <artifactId>oci-java-sdk-objectstorage</artifactId> <version>3.12.1</version> <!-- 与你使用的SDK版本保持一致 --> </dependency> <!-- HTTP客户端依赖 --> <dependency> <groupId>com.oracle.oci.sdk</groupId> <artifactId>oci-java-sdk-common-httpclient-jersey</artifactId> <version>3.12.1</version> <!-- 版本需与核心SDK匹配 --> </dependency>
错误解决与正确实现方式
NoSuchElementException原因
错误提示No http provider available是因为你只引入了核心SDK,但缺少HTTP客户端的实现依赖,OCI Java SDK需要明确的HTTP客户端来发起请求,添加上述oci-java-sdk-common-httpclient-jersey依赖即可解决。
预认证URL的正确使用姿势
不需要构建ObjectStorageClient并传入空的AuthenticationDetailsProvider,可以直接利用预认证URL进行操作:
上传文件示例
import com.oracle.bmc.objectstorage.transfer.UploadConfiguration; import com.oracle.bmc.objectstorage.transfer.UploadManager; import com.oracle.bmc.objectstorage.transfer.UploadManager.UploadRequest; import java.io.File; import java.net.URI; public class ParUploadExample { public static void main(String[] args) throws Exception { String preauthenticatedUrl = "你的预认证URL"; File fileToUpload = new File("要上传的文件路径"); UploadManager uploadManager = new UploadManager(new UploadConfiguration()); UploadRequest uploadRequest = UploadRequest.builder(URI.create(preauthenticatedUrl), fileToUpload) .build(); uploadManager.upload(uploadRequest); System.out.println("文件上传完成"); } }
下载文件示例
import com.oracle.bmc.objectstorage.transfer.DownloadConfiguration; import com.oracle.bmc.objectstorage.transfer.DownloadManager; import com.oracle.bmc.objectstorage.transfer.DownloadManager.DownloadRequest; import java.io.File; import java.net.URI; public class ParDownloadExample { public static void main(String[] args) throws Exception { String preauthenticatedUrl = "你的预认证URL"; File targetFile = new File("下载保存的文件路径"); DownloadManager downloadManager = new DownloadManager(new DownloadConfiguration()); DownloadRequest downloadRequest = DownloadRequest.builder(URI.create(preauthenticatedUrl), targetFile) .build(); downloadManager.download(downloadRequest); System.out.println("文件下载完成"); } }
内容的提问来源于stack exchange,提问作者Sitaram Yadav
相关产品推荐
相关产品推荐

