本文将介绍如何使用SDK来访问 DLF 全托管的 OSS 资源。
前提条件
阿里云账号(主账号)能直接调用 DLF OpenAPI。如果使用RAM账户,则需要具备以下权限:
支持配置最小细粒化权限,详情请参见DLF RAM鉴权Action说明。
拥有admin或super_administrator的RAM用户允许调用GetCatalogToken,详情请参见角色管理。
使用SDK获取DLF Catalog Token 列举 OSS 文件
CatalogTokenDemo
import com.aliyun.dlfnext20250310.Client;
import com.aliyun.dlfnext20250310.models.GetCatalogTokenResponse;
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProvider;
import com.aliyun.oss.common.auth.DefaultCredentialProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.ListObjectsV2Result;
import com.aliyun.oss.model.OSSObjectSummary;
import com.aliyun.teaopenapi.models.Config;
import java.util.Map;
public class CatalogTokenDemo {
public static void main(String[] args) throws Exception {
// 设置需要访问的 region 和 dlf endpoint
String region = "cn-hangzhou";
String dlfEndpoint = "dlfnext.cn-hangzhou.aliyuncs.com";
// 设置调用 DLF OpenAPI 的访问凭据
String dlfAccessKeyId = "${AccessKeyId}";
String dlfAccessKeySecret = "${AccessKeySecret}";
// 配置并创建 DLF OpenAPI 客户端
Config dlfConfig = new Config()
.setRegionId(region)
.setEndpoint(dlfEndpoint)
.setAccessKeyId(dlfAccessKeyId)
.setAccessKeySecret(dlfAccessKeySecret);
Client dlfClient = new Client(dlfConfig);
// 设置需要访问的 catalog 名称
String catalogName = "${CatalogName}";
// 调用 OpenAPI GetCatalogToken
GetCatalogTokenResponse response = dlfClient.getCatalogToken(catalogName);
// 可以从 response 中获取 token 过期时间,仅在有效期内的 token 可以访问 OSS, 过期后需要重新获取
System.out.println("catalog token will expire at " + response.getBody().getExpiresAtMillis());
// 从 response 中获取 catalog token
Map<String, String> catalogToken = response.getBody().getToken();
String ossAccessKeyId = catalogToken.get("fs.oss.accessKeyId");
String ossAccessKeySecret = catalogToken.get("fs.oss.accessKeySecret");
String ossSecurityToken = catalogToken.get("fs.oss.securityToken");
// 默认返回 OSS 的内网 Endpoint,如果需要使用公网 Endpoint,则去除 "-internal"
String ossEndpoint = catalogToken.get("fs.oss.endpoint").replace("-internal", "");
String ossBucketName = catalogToken.get("fs.oss.bucket.name");
// 使用 DefaultCredentialProvider 方法设置 OSS 的临时访问凭证
CredentialsProvider credentialsProvider = new DefaultCredentialProvider(ossAccessKeyId, ossAccessKeySecret, ossSecurityToken);
// 显式声明使用 V4 签名算法
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
// 创建 OSSClient 实例。
// 当 OSSClient 实例不再使用时,调用shutdown方法以释放资源。
OSS ossClient = OSSClientBuilder.create()
.endpoint(ossEndpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// 获取指定 bucket 的所有文件列表
ListObjectsV2Result result = ossClient.listObjectsV2(ossBucketName);
System.out.println("Files:");
for (OSSObjectSummary object : result.getObjectSummaries()) {
System.out.println(object.getKey());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
pom.xml
在 Maven Repository 中可以获取DLF OpenAPI最新的SDK包。
如需查看 OSS SDK 安装指南及各编程语言操作 OSS(如文件上传、下载等)的代码示例,请参见OSS Java SDK。
<!-- DLF SDK-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dlfnext20250310</artifactId>
<version>3.1.0</version>
</dependency>
<!-- OSS SDK -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
该文章对您有帮助吗?