Files
netdisk-fast-download/test_client_links.java
q 42b721eabf feat: 新增客户端协议生成系统,支持8种主流下载工具
🚀 核心功能
- 新增完整的客户端下载链接生成器系统
- 支持ARIA2、Motrix、比特彗星、迅雷、wget、cURL、IDM、FDM、PowerShell等8种客户端
- 自动处理防盗链参数(User-Agent、Referer、Cookie等)
- 提供可扩展的生成器架构,支持自定义客户端

🔧 技术实现
- ClientLinkGeneratorFactory: 工厂模式管理生成器
- DownloadLinkMeta: 元数据存储下载信息
- ClientLinkUtils: 便捷工具类
- 线程安全的ConcurrentHashMap设计

🌐 前端集成
- 新增ClientLinks.vue界面,支持客户端链接展示
- Element Plus图标系统,混合图标显示
- 客户端检测逻辑优化,避免自动打开外部应用
- 移动端和PC端环境判断

📚 文档完善
- 完整的CLIENT_LINK_GENERATOR_GUIDE.md使用指南
- API文档和测试用例
- 输出示例和最佳实践

从单纯的网盘解析工具升级为完整的下载解决方案生态
2025-10-24 09:29:05 +08:00

38 lines
1.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import cn.qaiu.entity.ShareLinkInfo;
import cn.qaiu.parser.clientlink.ClientLinkGeneratorFactory;
import cn.qaiu.parser.clientlink.DownloadLinkMeta;
import java.util.Map;
public class TestClientLinks {
public static void main(String[] args) {
// 创建一个测试用的 ShareLinkInfo模拟解析器没有实现客户端下载文件元数据的情况
ShareLinkInfo shareLinkInfo = ShareLinkInfo.newBuilder()
.shareUrl("https://example.com/share/test123")
.panName("测试网盘")
.type("test")
.build();
// 添加文件名信息(模拟解析器只解析了文件名)
shareLinkInfo.getOtherParam().put("fileInfo", new cn.qaiu.entity.FileInfo() {
@Override
public String getFileName() {
return "test-file.zip";
}
});
// 测试 DownloadLinkMeta.fromShareLinkInfo() 方法
DownloadLinkMeta meta = DownloadLinkMeta.fromShareLinkInfo(shareLinkInfo);
System.out.println("DownloadLinkMeta: " + meta);
System.out.println("Has valid URL: " + meta.hasValidUrl());
// 测试生成客户端链接
Map<cn.qaiu.parser.clientlink.ClientLinkType, String> clientLinks =
ClientLinkGeneratorFactory.generateAll(shareLinkInfo);
System.out.println("Generated client links count: " + clientLinks.size());
for (Map.Entry<cn.qaiu.parser.clientlink.ClientLinkType, String> entry : clientLinks.entrySet()) {
System.out.println(entry.getKey().getDisplayName() + ": " + entry.getValue());
}
}
}