Rat's

使用Aira2下载文件后自动上传到Google Drive网盘
说明:网盘挂载方法参考:在Debian/Ubuntu上使用rclone挂载Google Drive网盘,Aira2...
扫描右侧二维码阅读全文
30
2018/10

使用Aira2下载文件后自动上传到Google Drive网盘

说明:网盘挂载方法参考:在Debian/Ubuntu上使用rclone挂载Google Drive网盘Aira2安装参考:BT种子/磁力链接下载工具:Aria2一键安装管理脚本,以上工作都准备好了后,就可以使用Aria2将文件电影等资源下载到网盘了,鉴于hostloc有大佬说因为某些原因,不能将下载路径默认为Google Drive网盘指定的本地文件夹,就发现了这个方法,能直接在挂载后使用。通过配置项on-download-complete来完成下载文件自动移到Google Drive网盘里。

更新

【2018.10.30】
这里分享下萌咖大佬的Aira2上传脚本,不过是精简版,全能版暂不分享,精简版包含以下功能:
1、脚本适用于Rclone挂载的网盘,比如Onedrive/Google Drive等。
2、判断上传文件的文件大小区间。
限制最低上传大小:可防止产生的.aria2后缀文件一起上传到网盘。
限制最高文件大小:适用于Onedrive等,官方限制上传不能超过15G,其它可自行更改其数值。
3、支持文件名中包含空格等特殊字符。

使用方法

原理是当下载完后aria2会给脚本传3个参数$1$2$3分别为gid、文件数量、文件路径。我们对文件路径这个字符串处理一番就可以达到目的了。

新建脚本文件rcloneupload.sh,并复制下面代码:

#!/bin/bash

GID="$1";
FileNum="$2";
File="$3";
MinSize="5"  #限制最低上传大小,默认5k
MaxSize="157286400"  #限制最高文件大小(单位k),默认15G
RemoteDIR="/RATS/";  #rclone挂载的本地文件夹,最后面保留/
LocalDIR="/download/";  #Aria2下载目录,最后面保留/

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(){
  IFS_BAK=$IFS
  IFS=$'\n'
  if [[ ! -d "$LocalDIR" ]]; then return; fi
  if [[ -e "$File" ]]; then
    FileLoad="${File/#$LocalDIR}"
    while true
      do
        if [[ "$FileLoad" == '/' ]]; then return; fi
        echo "$FileLoad" |grep -q '/';
        if [[ "$?" == "0" ]]; then
          FileLoad=$(dirname "$FileLoad");
        else
          break;
        fi;
      done;
    if [[ "$FileLoad" == "$LocalDIR" ]]; then return; fi
    EXEC="$(command -v mv)"
    if [[ -z "$EXEC" ]]; then return; fi
    Option=" -f";
    cd "$LocalDIR";
    if [[ -e "$FileLoad" ]]; then
      ItemSize=$(du -s "$FileLoad" |cut -f1 |grep -o '[0-9]*' |head -n1)
      if [[ -z "$ItemSize" ]]; then return; fi
      if [[ "$ItemSize" -le "$MinSize" ]]; then
        echo -ne "\033[33m$FileLoad \033[0mtoo small to spik.\n";
        return;
      fi
      if [[ "$ItemSize" -ge "$MaxSize" ]]; then
        echo -ne "\033[33m$FileLoad \033[0mtoo large to spik.\n";
        return;
      fi
      eval "${EXEC}${Option}" \'"${FileLoad}"\' "${RemoteDIR}";
    fi
  fi
  IFS=$IFS_BAK
}
LoadFile;

授权chmod +x rcloneupload.sh,然后再到Aria2配置文件中加上一行on-download-complete=/root/rcloneupload.sh即可,后面为脚本的路径。最后重启Aria2生效。

本文只提到了Google Drive网盘挂载方法,如果你想用Onedrive可查看→Rclone挂载Onedrive网盘教程。对于不想用Rclone挂载Onedrive的,可以参考博客另一个教程→传送门

Vultr新用户注册送100美元/16个机房按小时计费,支持支付宝,【点击查看】。
最后修改:2018 年 12 月 20 日 06 : 20 PM

发表评论

123 条评论

  1. 3389

    博主你好,我想问一下你的AriaNG的WEB面板HTTPS是怎么设置的呢?我开启了HTTPS之后面板就无法连接上Aria2服务器了

    1. Rat's
      @3389

      看这个,aria2好像也要配置https,教程https://www.moerats.com/archives/989/

  2. ccqnb

    小白请教:我把onedrive上的video目录通过rclone挂载到主机上的/home/video目录,请问能否直接把aria2的下载目录设为/home/video呢,这样下载下来的视频会不会自动上传?

    1. Rat's
      @ccqnb

      理论上可以,需要改参数,不过不推荐,还是转移好点

      1. 大神好
        @Rat's

        大神请教一下,因为小鸡硬盘不够,所以想设置为下载目录,请问这里需要改什么参数呢?尝试过直接设置为下载目录了,但是写入速度太难看导致下载速度也变慢了

  3. 大神好

    老大帮我看看这个配置哪里出错了。
    手工上传没问题,自动上传不行。
    OneDriveUploader -c /root/auth.json -s "/usr/local/caddy/www/aria2/Download/" -r "download"
    (Main:2/2) nent.zip.aria2: [1/1 | 100% | Time: 0s | Remain: 0s]
    bash /root/.aria2/OneIndexupload.sh 没有错误
    /root/.aria2/OneIndexupload.sh 配置:
    RemoteDIR="download/"; #rclone挂载的本地文件夹,最后面保留/
    LocalDIR="/usr/local/caddy/www/aria2/Download/"; #Aria2下载目录,最后面保留/
    Uploader="/usr/local/bin/OneDriveUploader"; #上传的程序完整路径,默认为本文安装的目录
    Config="/root/auth.json"; #初始化生成的配置auth.json绝对路径,参考第3步骤生成的路径

    /root/.aria2/aria2.conf配置
    on-download-complete=/root/.aria2/OneIndexupload.sh
    on-download-complete=OneIndexupload.sh
    请老大给看看

    1. Rat's
      @大神好

      这个重复了on-download-complete,看下aria2日志

  4. D4Dea4

    大佬,我按照这个配置成功后,尝试下载了,昨天下载完很快就自动上传了,今天再下载,发现就不自动上传了,昨天下载的是单个文件,今天下载的是有文件夹的,是不是有这个原因?

    1. D4Dea4
      @D4Dea4

      大佬,我重新配置了一下,现在会自动移到挂载的目录,但是没有上传到网盘,大佬知道怎么看原因吗?
      upload:UPLOAD 1.1P 8.8G 1.0P 1% /home/GoogleDrive

  5. rcloneguy

    大佬,我在debian 10系统下挂载了一个谷歌团队盘,部署了aria2,离线下载没问题。但用你这个脚本无法实现自动上传,检查了脚本中的参数没有问题。会是什么原因呢?

    1. Rat's
      @rcloneguy

      1、脚本编码问题,使用bash xx.sh命令检查下,没输出就正常
      2、脚本没给可执行权限,+x。
      3、aria2.conf没有正确配置上传,或者脚本路径不对

      1. rcloneguy
        @Rat's

        谢谢,最后还是没找到问题。换了这个一键脚本:https://github.com/P3TERX/aria2.sh,把里面的autoupload.sh编辑了一下,最后终于搞定了。

        1. xiaoma
          @rcloneguy

          请问您是怎么修改的?

  6. MurrddoL

    我这边挂载了OneDrive和GoogleDrive,想上传到两个网盘,脚本修改如下,测试没成功,麻烦看一下哪里有问题

    !/bin/bash

    GID="$1";
    FileNum="$2";
    File="$3";
    MinSize="5" #限制最低上传大小,默认5k
    MaxSize="12582912" #限制最高文件大小(单位k),默认15G
    RemoteDIR="/root/GoogleDrive/"; #rclone挂载的本地文件夹,最后面保留/
    RemoteDIRR="/root/OneDrive/"; #rclone挂载的本地文件夹2,最后面保留/
    LocalDIR="/root/download/"; #Aria2下载目录,最后面保留/

    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(){
    IFS_BAK=$IFS
    IFS=$'n'
    if [[ ! -d "$LocalDIR" ]]; then return; fi
    if [[ -e "$File" ]]; then

    FileLoad="${File/#$LocalDIR}" while true do if [[ "$FileLoad" == '/' ]]; then return; fi echo "$FileLoad" |grep -q '/'; if [[ "$?" == "0" ]]; then FileLoad=$(dirname "$FileLoad"); else break; fi; done; if [[ "$FileLoad" == "$LocalDIR" ]]; then return; fi EXEC="$(command -v cp)"; if [[ -z "$EXEC" ]]; then return; fi Option=" -f"; cd "$LocalDIR"; if [[ -e "$FileLoad" ]]; then ItemSize=$(du -s "$FileLoad" |cut -f1 |grep -o '[0-9]*' |head -n1) if [[ -z "$ItemSize" ]]; then return; fi if [[ "$ItemSize" -le "$MinSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo small to spik.\n"; return; fi if [[ "$ItemSize" -ge "$MaxSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo large to spik.\n"; return; fi eval "${EXEC}${Option}" \'"${FileLoad}"\' "${RemoteDIRR}"; fi EXEC="$(command -v mv)"; if [[ -z "$EXEC" ]]; then return; fi Option=" -f"; cd "$LocalDIR"; if [[ -e "$FileLoad" ]]; then ItemSize=$(du -s "$FileLoad" |cut -f1 |grep -o '[0-9]*' |head -n1) if [[ -z "$ItemSize" ]]; then return; fi if [[ "$ItemSize" -le "$MinSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo small to spik.\n"; return; fi if [[ "$ItemSize" -ge "$MaxSize" ]]; then echo -ne "\033[33m$FileLoad \033[0mtoo large to spik.\n"; return; fi eval "${EXEC}${Option}" \'"${FileLoad}"\' "${RemoteDIR}"; fi

    fi
    IFS=$IFS_BAK
    }
    LoadFile

    1. MurrddoL
      @MurrddoL

      搞定了,授权不知道为什么从755变成了711,重新授权就可以

  7. oxmo

    aria2下载到服务器 服务器上传到onedrive,这个过程中间服务器流量扣费嘛?

    1. Rat's
      @oxmo

      需要消耗服务器的双向流量。

  8. Justf

    评论错博文了还行,麻烦删掉一下谢谢Orrrz

    1. Rat's
      @Justf

      好的

  9. hyx

    你好,博主请问一下,自动上传是先离线下载到服务器吗?如果我下载的文件东西超过了服务器硬盘容量怎么办(比如:我服务器硬盘是25G的,但我离线下载的文件时30G的),像这种情况我该怎么办,是继续走服务器,还是通过域名走???

    1. Rat's
      @hyx

      是的,先下载到服务器,再传到网盘,要是文件比硬盘大的话,就很容易爆。

      1. hyx
        @Rat's

        你好,博主如果我下载种子的话,它自动上传是按照文件夹总大小来上传,还是按照里面单个文件来上传。还有一次性下载多个种子总大小超过服务器硬盘,它还是会爆吗?

        1. Rat's
          @hyx

          按照整个种子进度上传,等于你说的整个文件夹。

  10. 5555

    博主,上传成功后本地文件会不会残留

    1. Rat's
      @5555

      按理说不会,实际就不清楚了