之前介绍了如何部署(详见这篇)和图形化管理界面的部署(详见这篇),但是对于远程获取aria2c所下载的文件仍然是个难点。如果完成了这一点,那就基本完成了某云、某雷离线下载的基本内容。

Aria2c文件操作的特点

首先,aria2c有且只有JSON-RPC/XML-RPC操纵接口。倒也不是说它实现的接口太少,正常的下载工具,例如Transmission、Vuze等,都只实现了这样的RPC操纵接口。

另外一点通过RPC接口调用的remove方法(也就是所谓删除任务),并没有删除已下载文件的可选参数。简单来说就是,你无法通过图形化管理界面删除任务及其文件。

最后,通过PRC接口调用tellStatus方法(即返回任务状态),得到的目标下载地址是相对于配置文件,或新建任务时指定的下载目录的相对路径。

SMB/Nextcloud 途径

这条途径将SMB作为局域网共享,而Nextcloud作公网共享。以SMB作局域网共享的优势在于良好的Windows兼容性,任何局域网内的Windows主机只需要简单地【添加一个网络位置】就可以像操作本地文件夹一般操作aria2c的下载目录。而以Nextcloud作为公网共享的优势,则在于协议上相对安全,因为一般而言并不建议将SMB共享开放到公网上。同时如果已经有Nextcloud作为自制网盘的话,集成进Nextcloud会更加便利。

间章一 · 关于三种网络位置的讨论

查看Windows主机上添加网络位置的三个示例,可以看到有三种:共享文件夹(即SMB)、Web共享(即WebDAV)和FTP站点(即FTP)。在目前只需要简单地操作下载目录中文件的实例中,三者从性能上差不多。或者说,IOPS大小对我们影响不大,我们并不在意;协议开销(有一些同志指出SMB的协议开销特别大),但在目前的千兆局域网条件下(部分石油佬可能都搭起了10Gbps局域网),似乎也没有什么值得担忧的,即使是4k蓝光电影,比特率不过130Mbps,只要设备链路达到千兆级别,协议开销87%都能撑住4k Blue-ray(笑)。

因此接下来考虑的重点,可能只是服务端与客户端配置,孰难孰易。

对于SMB而言,在服务端,Windows下几乎零配置,Liunx系的可能要加一个smb包和nmb包;在客户端,Windows下零配置,Linux系同样要加一个smbclient。

而对于WebDAV而言,服务端的配置就要麻烦一点,Windows下可以考虑IIS的WebDAV功能,Linux系的可能需要一些Nextcloud之类的CMS,以提供WebDAV服务;在客户端,Windows下可能是零配置的(视WebDAV是否使用SSL,不使用SSL需要调整Windows的一些参数),Linux系curl和wget都能很好地工作。

最后对于FTP来说,在服务端,Windows可以选择IIS的FTP功能,也可以选择FileZilla等FTP服务器程序,Linux系的话,一般选择vsftpd;在客户端,Windows下零配置,同样Linux系的curl和wget也完全没有问题。

1. 将Aira2下载目录建立共享

这里以Windows为例,因为如果是Linux系,更建议直接把Nextcloud也部署在同一主机中,然后使用Nextcloud挂载本地文件夹。

新建一个专用的本地账户,然后右键文件夹→属性→共享→网络文件和文件夹共享,设置刚刚新建的账户具有读写权限,然后,就完成了。这就是所谓,几乎零配置。

2. Nextcloud挂载SMB共享

首先需要安装php的smbclient扩展,包名一般叫php-smbclient。

然后在Nextcloud的外部储存中新建一个【SMB/CIFS】类型的外部储存,认证方式为【用户名和密码】,配置选项一看就知道该怎么填,特别需要说明一点的是【域名】需要填写为共享文件夹那个Windows主机的主机名

至此就可以从Nextcloud操作Aria2c的下载目录。
甚至你能将下载的文件再复制到Nextcloud的主储存目录,当然需要注意复制文件会有一个最长执行时间的问题,如果超出最长执行时间(通常是因为局域网是百兆链路),那么其结果是难以估计的,这一点需要注意。
抑或是设置共享,通过URL链接分享下载的文件。

3. (可选)配置Nextcloud外部站点插件

如果根据之前的AriaNg部署,那应该会有一个公网可访问的AriaNg页面,接下来要做的就是把这个页面嵌入NextCloud。好在NextCloud有一个External Website(“外部站点”)插件,配置一个新站点,站点URL就设置为之前那个公网可访问的AriaNg的地址。然后就大功告成啦🎉

当然AriaNg目前还不能设置主题颜色之类的东西,或者说不能很方便的调整色彩(一定要改的话,CSS文件就在你手里),因此可以考虑专门跑一个NextCloud实例用于管理下载(当然如果这样子的话,容器化会比较好。只不过容器化对于NextCloud这种更新得很频繁的软件来讲,并不是很有吸引力)。

间章二 · 关于ocDownloader插件的讨论

如果很早接触ownCloud/NextCloud,那应该听说过这个神奇的插件。它与本机的aria2c的RPC接口交互,可以在NextCloud内完成文件的下载。但是他并不是在NextCloud用户根目录新建一个虚拟文件夹来表示下载目录;仍然需要用户手动挂载外部储存。尽管如此,在当时可以说是一种神器般的存在。但时至今日,ocDownloader可以说,只能是没有办法的办法。

ocDownloader的典型界面
ocDownloader的典型界面
ariang的典型界面
ariang的典型界面

(摊手.jpg)

ocDownloader唯一值得称道的地方,可能只在于他可以选择curl作为下载后端,而安装curl又是极其简单的——只要装上php-curl就行了,事实上只要能正确安装nextcloud,基本都装上了php-curl,毕竟人家要更新的呀。
那我们来细数一下ocDownloader的不足之处:

  1. 只能与本机的aria2c交互。
    • 因为只能与本机的交互,因此暂不支持rpc-secret,而且我想这个功能的开发优先度也是很低。
  2. 作为插件,还需要手动挂载下载目录。

留下评论