Problem
当前离线下载 / 链接导入只接受 http:// 和 https:// URL,并且任务模型假设最终只导入一个文件。现在已经支持 aria2 作为外部下载引擎,但还没有开放 aria2 已经具备的 BitTorrent / Magnet 能力。
用户希望可以把磁力链接或 BT 资源交给 AsterDrive 离线下载,再导入到目标文件夹。
初步调查:
- aria2 官方文档说明
aria2.addUri() 支持 HTTP/FTP/SFTP/BitTorrent Magnet URI;添加 Magnet URI 时 uris 必须只有一个元素。
- aria2 官方文档说明
.torrent 文件内容应通过 aria2.addTorrent() 上传,torrent 参数是 base64 编码的 .torrent 文件内容;如果是 Magnet URI,则应继续使用 aria2.addUri()。
- AsterDrive 当前
OfflineDownloadTaskResult 是单文件结果:file_id、file_name、folder_id、file_path、content_length、sha256。BT 任务可能产出目录或多个文件,不能直接塞进现有单文件结果模型。
- 当前存储导入路径走
store_from_temp_internal(),也是单文件导入接口。完整 BT 支持需要补目录 / 多文件导入流程和结果展示。
参考:
Proposed solution
建议分阶段实现,避免一次把任务模型和存储导入打烂:
-
第一阶段支持 Magnet URI 的受限版本:
parse_and_validate_source_url() 允许 magnet: scheme。
- Magnet 任务只能在 aria2 引擎启用时执行;内置下载器遇到 Magnet 应直接返回明确错误,不能 fallback 成 HTTP 下载。
- Magnet 任务继续通过
aria2.addUri() 提交。
- aria2 完成后检查结果路径:
- 如果最终只有一个普通文件,则按现有单文件导入流程导入。
- 如果产出目录、多个文件、或无法唯一定位单文件,则任务失败并给出明确错误,提示后续需要多文件 BT 支持。
- 对 Magnet 任务禁用
expected_sha256,或只在单文件结果明确后继续支持校验;需要在设计里明确。
- 任务展示和文档明确这是 “Magnet 单文件导入” 的阶段性能力。
-
第二阶段支持完整 BT / 多文件导入:
- 设计新的任务 result 结构,例如
file_id 单文件结果和 folder_id / imported_files 多文件结果二选一。
- 增加从临时目录批量导入到 workspace 的 service,处理目录创建、文件名冲突、配额、去重、失败回滚或部分失败策略。
- 前端任务详情支持展示多个导入结果或目标目录。
- 支持
.torrent 文件输入时,再设计 API 形态:上传 torrent 文件、通过 URL 拉取 .torrent 后转 addTorrent(),还是只支持 Magnet。
-
安全与运维边界:
- 只有 aria2 引擎支持 BT;内置引擎不实现 BT 协议。
- 文档需要说明 BT 出站连接、DHT、tracker、上传行为由 aria2 daemon 控制,AsterDrive 的 HTTP URL 私网地址防护不等价于 BT 网络隔离。
- 配置文档需要提示生产环境要在 aria2 层限制网络、下载目录和 RPC 访问。
- 需要考虑是否新增 BT 开关,避免管理员只想用 aria2 HTTP 下载时无意启用 BT。
Alternatives considered
- 直接把
magnet: 当作普通 URL 允许,然后沿用当前单文件路径:不可取。BT 可能产出多文件 / 目录,当前结果模型和导入接口无法正确表达。
- 一次性实现
.torrent、Magnet、多文件目录导入:可行但范围较大,会同时影响后端任务模型、存储导入、前端任务详情和文档,建议拆阶段。
- 只支持 aria2 下载到临时目录但不导入 workspace:不符合 AsterDrive “链接导入” 的用户预期,也会留下临时文件清理和权限语义问题。
Category
File management
Contribution
Checklist
Problem
当前离线下载 / 链接导入只接受
http://和https://URL,并且任务模型假设最终只导入一个文件。现在已经支持 aria2 作为外部下载引擎,但还没有开放 aria2 已经具备的 BitTorrent / Magnet 能力。用户希望可以把磁力链接或 BT 资源交给 AsterDrive 离线下载,再导入到目标文件夹。
初步调查:
aria2.addUri()支持 HTTP/FTP/SFTP/BitTorrent Magnet URI;添加 Magnet URI 时uris必须只有一个元素。.torrent文件内容应通过aria2.addTorrent()上传,torrent 参数是 base64 编码的.torrent文件内容;如果是 Magnet URI,则应继续使用aria2.addUri()。OfflineDownloadTaskResult是单文件结果:file_id、file_name、folder_id、file_path、content_length、sha256。BT 任务可能产出目录或多个文件,不能直接塞进现有单文件结果模型。store_from_temp_internal(),也是单文件导入接口。完整 BT 支持需要补目录 / 多文件导入流程和结果展示。参考:
Proposed solution
建议分阶段实现,避免一次把任务模型和存储导入打烂:
第一阶段支持 Magnet URI 的受限版本:
parse_and_validate_source_url()允许magnet:scheme。aria2.addUri()提交。expected_sha256,或只在单文件结果明确后继续支持校验;需要在设计里明确。第二阶段支持完整 BT / 多文件导入:
file_id单文件结果和folder_id/imported_files多文件结果二选一。.torrent文件输入时,再设计 API 形态:上传 torrent 文件、通过 URL 拉取.torrent后转addTorrent(),还是只支持 Magnet。安全与运维边界:
Alternatives considered
magnet:当作普通 URL 允许,然后沿用当前单文件路径:不可取。BT 可能产出多文件 / 目录,当前结果模型和导入接口无法正确表达。.torrent、Magnet、多文件目录导入:可行但范围较大,会同时影响后端任务模型、存储导入、前端任务详情和文档,建议拆阶段。Category
File management
Contribution
Checklist