本文档介绍在HarmonyOS客户端上使用阿里云OSS SDK接入HTTPDNS的方案。
1. 背景说明
阿里云对象存储OSS(Object Storage Service)是一款通用的云存储服务,可让开发者在各类应用中便捷地存储和访问用户头像、图片、音视频等文件。在HarmonyOS端,可以通过集成OSS HarmonyOS SDK来完成。
为了提升文件传输的稳定性和速度,可以将HTTPDNS SDK与OSS HarmonyOS SDK进行结合,对OSS域名进行解析。这可以有效实现域名防劫持和DNS解析加速,从而优化应用访问OSS的网络体验。
2. 接入步骤
在HarmonyOS上,将HTTPDNS与OSS SDK进行集成,整个接入过程分为以下两个核心步骤:
创建一个集成了HTTPDNS解析能力的
rcp.Session
。使用这个定制化的会话来初始化OSS客户端。
2.1 创建集成HTTPDNS的Session
首先,需要创建一个rcp.Session
实例,并在其配置中嵌入自定义的DNS解析规则,该规则会调用HTTPDNS服务来解析域名。
HTTPDNS的完整接入流程,参考HarmonyOS SDK接入HarmonyOS SDK接入。
import { httpdns } from '@aliyun/httpdns';
import { rcp } from '@kit.RemoteCommunicationKit';
/**
* 创建一个集成了阿里云HTTPDNS解析能力的网络会话 (rcp.Session)。
*
* @param httpdnsAccountId 您的阿里云HTTPDNS Account ID。
* @returns 返回一个配置好DNS解析规则的 rcp.Session 实例。
*/
async function createHttpDnsEnhancedSession(httpdnsAccountId: string): Promise<rcp.Session> {
const httpdnsService = await httpdns.getService(httpdnsAccountId);
const sessionConfig: rcp.SessionConfiguration = {
requestConfiguration: {
dns: {
dnsRules: (host: string): string[] => {
try {
const result = httpdnsService.getHttpDnsResultSyncNonBlocking(host);
let addresses: string[] = [];
if (result.ipv4s && result.ipv4s.length > 0) {
addresses.push(...result.ipv4s);
}
if (result.ipv6s && result.ipv6s.length > 0) {
addresses.push(...result.ipv6s);
}
if (addresses.length > 0) {
return addresses; // 返回合并后的IP地址列表
}
} catch (error) {
console.error(`[HttpDNS] 解析失败: ${host}`, error);
}
// 当解析失败或无结果时,返回空数组以降级到系统默认DNS
return [];
}
}
}
};
return rcp.createSession(sessionConfig);
}
2.2 使用该Session初始化OSS客户端
其次,将上一步创建的rcp.Session
实例,在初始化OSS客户端时作为配置参数传入。这样,所有通过该客户端发起的网络请求都将自动使用我们定义的HTTPDNS解析逻辑。
OSS SDK的接入和使用,可以参考OSS Harmony SDK(预览版)。
import Client from '@aliyun/oss';
// 省略 createHttpDnsEnhancedSession 函数内容
/**
* 演示如何初始化一个使用HTTPDNS增强会话的OSS客户端。
*/
async function initializeOssClientWithHttpDns() {
const YOUR_HTTPDNS_ACCOUNT_ID = 'your_httpdns_account_id'; // 替换为您的Account ID
const YOUR_ACCESS_KEY_ID = 'your_access_key_id'; // 替换为您的AK
const YOUR_ACCESS_KEY_SECRET = 'your_access_key_secret'; // 替换为您的SK
const YOUR_REGION = 'oss-cn-hangzhou'; // 替换为您的Region
// 调用步骤一的函数,创建集成了HTTPDNS的Session
const httpDnsSession = await createHttpDnsEnhancedSession(YOUR_HTTPDNS_ACCOUNT_ID);
// 初始化OSS客户端,并将创建好的Session实例传递进去
const ossClient = new Client({
accessKeyId: YOUR_ACCESS_KEY_ID,
accessKeySecret: YOUR_ACCESS_KEY_SECRET,
region: YOUR_REGION,
session: httpDnsSession, // 核心:传入定制化的session
});
console.log('OSS Client with HttpDNS initialized successfully!');
// 此 ossClient 实例已成功集成HTTPDNS。
// 后续操作(如上传、下载)的网络请求将自动通过HTTPDNS解析。
// await ossClient.putObject(...);
return ossClient;
}
HTTPDNS SDK初始化设置需要在OSS SDK初始化设置之前完成。
3. 总结
通过为OSS客户端提供一个带有自定义DNS解析规则的rcp.Session
实例,可以在HarmonyOS上实现HTTPDNS与OSS SDK的结合,从而优化网络性能与安全性。
集成过程中的关键注意点如下:
初始化顺序:必须先初始化HTTPDNS服务,再初始化OSS客户端。
降级处理:
dnsRules
回调中,当HTTPDNS解析无结果或失败时,务必返回空数组[]
以启用系统DNS降级。