在之前的基于OLAINDEX搭建的网盘中,用shell脚本调用OLAINDEX自带的上传功能来实现离线下载,但常常会出现文件下完没有上传的问题。
刚开始没在意,后来丢的文件一多,就去查看了log:

log

很明显,连接问题,作者也说明了离线下载功能是实验性的,不稳。

在一番寻找之后,终于发现了萌咖大佬的写得一个onedrive文件上传程序:
OneDriveUploader

马上试了下手动上传文件,稳稳地传好了大小文件。

离线下载有救了!


教程

授权

国际版, 个人版(家庭版):
点这里

中国版(世纪互联):
点这里

登录授权后会获得一个localhost开头并且无法打开的链接,保存好链接,后面要用。

安装OneDriveUploader

直接运行命令下载,这里装到/usr/local/bin/

64位系统下载
wget https://raw.githubusercontent.com/MoeClub/OneList/master/OneDriveUploader/amd64/linux/OneDriveUploader -P /usr/local/bin/
32位系统下载
wget https://raw.githubusercontent.com/MoeClub/OneList/master/OneDriveUploader/i386/linux/OneDriveUploader -P /usr/local/bin/
arm架构下载
wget https://raw.githubusercontent.com/MoeClub/OneList/master/OneDriveUploader/arm/linux/OneDriveUploader -P /usr/local/bin/

给予权限
chmod +x /usr/local/bin/OneDriveUploader

初始化配置文件

国际版:
OneDriveUploader -a "url"
个人版(家庭版):
OneDriveUploader -ms -a "url"
中国版(世纪互联):
OneDriveUploader -cn -a "url"

在浏览器地址栏中获取以 http://loaclhost 开头的整个url内容
将获取的完整url内容替换命令中的 url 三个字母
每次产生的 url 只能用一次, 重试请重新获取 url
此操作将会自动初始化的配置文件
提示 Init config file: '/path/to/auth.json' 则成功

配置自动上传

这里的使用萌咖大佬的脚本。

新建一个one-up.sh文件,在文件中键入以下内容:

#!/bin/bash

GID="$1";
FileNum="$2";
File="$3";
MaxSize="15728640";
Thread="3"; #默认3线程,自行修改,服务器配置不好的话,不建议太多
Block="20"; #默认分块20m,自行修改
RemoteDIR=""; #上传到Onedrive的路径,默认为根目录
LocalDIR="/www/download/"; #Aria2下载目录,记得最后面加上/
Uploader="/usr/local/bin/OneDriveUploader"; #上传的程序完整路径,默认为本文安装的目录
Config="/root/auth.json"; #初始化生成的配置auth.json绝对路径,参考第3步骤生成的路径


if [[ -z $(echo "$FileNum" |grep -o '[0-9]*' |head -n1) ]]; then FileNum='0'; fi
if [[ "$FileNum" -le '0' ]]; then exit 0; fi
if [[ "$#" != '3' ]]; then exit 0; fi

function LoadFile(){
if [[ ! -e "${Uploader}" ]]; then return; fi
IFS_BAK=$IFS
IFS=$'\n'
tmpFile="$(echo "${File/#$LocalDIR}" |cut -f1 -d'/')"
FileLoad="${LocalDIR}${tmpFile}"
if [[ ! -e "${FileLoad}" ]]; then return; fi
ItemSize=$(du -s "${FileLoad}" |cut -f1 |grep -o '[0-9]*' |head -n1)
if [[ -z "$ItemSize" ]]; then return; fi
if [[ "$ItemSize" -ge "$MaxSize" ]]; then
echo -ne "\033[33m${FileLoad} \033[0mtoo large to spik.\n";
return;
fi
${Uploader} -c "${Config}" -t "${Thread}" -b "${Block}" -s "${FileLoad}" -r "${RemoteDIR}" -skip
if [[ $? == '0' ]]; then
rm -rf "${FileLoad}";
fi
IFS=$IFS_BAK
}
LoadFile;

保存后,修改权限:

chmod +x /root/one-up.sh

/root/one-up.sh修改成你的文件路径

编辑aria2配置文件:

vi /root/.aria2/aria2.conf

i进入插入模式,在文件中添加一句:

on-download-complete=/root/one-up.sh

Esc,输入:wq保存退出。

重启aria2:

service aria2 restart

到这里离线下载就配置完成了,之后在aria2下载完成后会自动上传Onedrive中。

在我配置的过程中,发现文件正常下载并且可以手动上传,但不能自动上传。
排查后发现是编码的问题。

安装dos2unix:

Centos:yum install dos2unix -y

Debian/Ubuntu:apt install dos2unix -y

转换编码:

dos2unix /root/one-up.sh

这样就可以正常自动上传了。