SDK访问DLF全托管存储

本文将介绍如何使用SDK来访问 DLF 全托管的 OSS 资源。

前提条件

已经创建DLF Catalog

阿里云账号(主账号)能直接调用 DLF OpenAPI。如果使用RAM账户,则需要具备以下权限:

使用SDK获取DLF Catalog Token 列举 OSS 文件

CatalogTokenDemo

说明
  • 调用 DLF OpenAPI 的访问凭据支持(AccessKey 或者 STS Token),详情请参见使用访问凭据

  • 示例中以杭州地域为例,更多 DLF 支持地域及访问 Endpoint 请参见服务接入点

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>