@xunlei-open/dlsdk
v1.0.2
Published
迅雷 XL Download Node SDK。
Readme
迅雷下载 Node.js SDK 指南
XL Download Node.js SDK 适用于在 Node.js 桌面工具(例如 Electron 应用)中接入迅雷下载能力,支持 TypeScript 和 JavaScript 调用。
支持平台
| Windows x64 | Windows x86 | macOS Universal | Linux x64 | | --- | --- | --- | --- | | ✅ | ✅ | ✅ | ✅ |
环境要求
- Node.js 18 或更高版本。
包说明
@xunlei-open/dlsdk:主 API 包。@xunlei-open/dlsdk-native-windows-x64@xunlei-open/dlsdk-native-windows-x86@xunlei-open/dlsdk-native-macos-universal@xunlei-open/dlsdk-native-linux-x64
npm 安装
在应用项目中安装主包,并按应用要支持的平台安装对应 native 包。跨平台应用可以同时安装多个 native 包,运行时会加载当前平台对应的动态库。
| 目标平台 | 安装命令 |
| --- | --- |
| Windows x64 | npm install @xunlei-open/dlsdk @xunlei-open/dlsdk-native-windows-x64 |
| Windows x86 | npm install @xunlei-open/dlsdk @xunlei-open/dlsdk-native-windows-x86 |
| macOS Universal | npm install @xunlei-open/dlsdk @xunlei-open/dlsdk-native-macos-universal |
| Linux x64 | npm install @xunlei-open/dlsdk @xunlei-open/dlsdk-native-linux-x64 |
例如接入 Windows x64:
npm install @xunlei-open/dlsdk @xunlei-open/dlsdk-native-windows-x64最小示例
import fs from "node:fs";
import { XLDownloadAPI, ERROR_ALREADY_INIT, ERROR_SUCCESS, TASK_STATUS_SUCCEEDED, TASK_STATUS_FAILED } from "@xunlei-open/dlsdk";
const appId = "your-app-id";
const apiKey = "your-api-key";
const configPath = "/tmp/xl_dl_sdk_conf";
const savePath = "/tmp/ThunderDownload";
fs.mkdirSync(configPath, { recursive: true });
fs.mkdirSync(savePath, { recursive: true });
const sdk = new XLDownloadAPI();
let initialized = false;
try {
const initResult = sdk.init({
appId,
appVersion: "1.0",
configPath,
saveTasks: true
});
if (initResult !== ERROR_SUCCESS && initResult !== ERROR_ALREADY_INIT) {
throw new Error(`init failed: ${initResult}`);
}
initialized = true;
const token = await sdk.getLoginToken(apiKey);
const login = sdk.login(token.token);
if (login.result !== ERROR_SUCCESS) {
throw new Error(`login failed: ${login.result}`);
}
const task = sdk.createP2spTask({
url: "https://example.com/file.zip",
savePath,
saveName: "file.zip"
});
if (task.result !== ERROR_SUCCESS) {
throw new Error(`create task failed: ${task.result}`);
}
const startResult = sdk.startTask(task.taskId);
if (startResult !== ERROR_SUCCESS) {
throw new Error(`start task failed: ${startResult}`);
}
while (true) {
const state = sdk.getTaskState(task.taskId);
process.stdout.write(`\rstate:${state.state.stateCode} downloaded:${state.state.downloadedSize}/${state.state.totalSize} speed:${state.state.speed}`);
if (
state.result !== ERROR_SUCCESS ||
state.state.stateCode === TASK_STATUS_SUCCEEDED ||
state.state.stateCode === TASK_STATUS_FAILED
) {
console.log();
break;
}
await new Promise(resolve => setTimeout(resolve, 1000));
}
} finally {
if (initialized) {
sdk.uninit();
}
}完整可运行示例见 示例代码。
