aria2c RPC接口中aria2.addTorrent方法忽略dir选项问题
问题描述
在服务器上将aria2c以守护进程(RPC接口)运行,调用aria2.addTorrent方法添加种子并指定下载目录时,文件能正常下载,但未保存到指定目录,而是存放在aria2c的当前工作目录。
启动守护进程的命令
aria2c --log="the.log" --disable-ipv6 \ --enable-rpc --rpc-listen-all --rpc-listen-port=7777 \ --seed-time=0 --bt-tracker-connect-timeout=30 --bt-tracker-timeout=10
初始RPC请求JSON
{ "jsonrpc":"2.0", "id":user_id, "method":"aria2.addTorrent", "params":[mfile_base64,[{ "dir":outdir_str }]], }
user_id:随机用户名或IDmfile_base64:种子文件(.torrent)内容的Base64编码outdir_str:期望的文件下载目录
已确认目标目录存在且有读写权限,为本地常规目录。
编辑1:尝试修改参数格式后的问题
将参数改为如下格式后,下载无法启动,返回参数类型错误:
{ "jsonrpc":"2.0", "id":user_id, "method":"aria2.addTorrent", "params":[mfile_base64,{ "dir":outdir_str }], }
错误返回:
{'id': 'user1', 'jsonrpc': '2.0', 'error': {'code': 1, 'message': 'The parameter at 1 has wrong type.'}}
解决方案
1. 修正RPC请求的参数结构
aria2.addTorrent的正确参数定义为:aria2.addTorrent(torrent, options[, files])
torrent:Base64编码的种子内容(必填)options:对象类型的下载配置(如dir,必填)files:数组类型,指定要下载的文件索引(可选,省略则下载全部)
你初始请求中错误地将options包裹在数组里,导致aria2将其识别为可选的files参数,而非下载配置,因此默认使用工作目录。
2. 修复JSON语法错误
你编辑1中的JSON请求末尾存在多余逗号(params数组后的逗号),这会导致JSON解析失败,触发参数类型错误。需确保JSON格式严格合法,无多余标点。
3. 使用绝对路径作为下载目录
确保outdir_str为绝对路径(如Linux的/home/user/downloads,Windows的D:\\downloads)。相对路径会以aria2c守护进程的工作目录为基准,容易导致路径不符合预期。
正确的RPC请求示例
{ "jsonrpc": "2.0", "id": "user1", "method": "aria2.addTorrent", "params": [ "你的种子文件Base64编码内容", {"dir": "/absolute/path/to/your/directory"} ] }
若需指定下载部分文件,可添加第三个参数:
{ "jsonrpc": "2.0", "id": "user1", "method": "aria2.addTorrent", "params": [ "你的种子文件Base64编码内容", {"dir": "/absolute/path/to/your/directory"}, [0, 2] // 仅下载种子中索引为0和2的文件 ] }
内容的提问来源于stack exchange,提问作者カルロサグ
相关产品推荐
相关产品推荐

