Pages

Thursday, 26 December 2019

Onedrive文件本地化浏览源码:PyOne、CuteOne、CuteOneP、OLAINDEX、Oneindex、OneList, FODI

使用稳定的教育邮箱,获得的Onedrive空间相比很稳定,而且微软给的量也足,空间最少是1T,部分是5T,同时可增加到25T。
利用 OneDriveUploader:多线程上传文件/文件夹到OneDrive的工具,支持Linux、Windows、MacOS,可批量、自动上传资料,那么如何把上传资源比较完美的共享、利用,这就要用到了Onedrive文件本地化浏览工具,如PyOne、CuteOne、OLAINDEX、oneindex等。
一、OneIndex
这个部署最是简单,只要支持PHP 5.6+、curl就可以。
项目已开源:https://github.com/donwa/oneindex,  https://github.com/qupb/oneindex

二、PyOne
PyOne是一款基于Python-Flask的onedrive文件本地化浏览系统,使用MongoDB储存文件列表,使用redis缓存数据,支持绑定多个网盘,支持搜索文件,支持移动文件(仅限单文件)。
项目已开源:https://github.com/abbeyokgo/PyOne
三、CuteOne
CuteOne是一款基于Python3的onedrive文件本地化浏览系统。
多盘负载、在线查看、在线上传、下载、多盘同步、主从同步、在线分享、文件夹权限管理、 会员功能、等级制度、付费查看、密码查看、支付模块、主题切换、极速缓存、模块化插件化管理、
项目已开源: https://github.com/Hackxiaoya/CuteOne
四、CuteOneP
CuteOneP是CuteOne的PHP版本,沿用一致的UI风格,保持代码精简 框架可扩展。
项目已开源: https://github.com/Hackxiaoya/CuteOneP
五、OLAINDEX
基于Laravel开发,支持多类型帐号登录,多种主题显示,功能强大。
项目已开源:https://github.com/WangNingkai/OLAINDEX
六、OneList
基于python3,功能相对简单。
项目已开源:https://github.com/0oVicero0/OneList
七、FODI
Fast OneDrive Index / FODI,无需服务器的 OneDrive 快速列表程序
项目已开源:https://github.com/vcheckzen/FODI
八,OneDriveFly

OneDriveFly

release Travis Travis License

Install  

About

OneDriver Index Anywhere.

Support

QCloud SCF

Aliyun FC

Heroku

will support in future

Cloudflare Workers

Google Cloud Functions

Azure Functions

Dev

git clone https://github.com/Tai7sy/OneDriveFly.git
cd OneDriveFly/php
composer create-project
cd OneDriveFly/nodejs
npm i && npm build

The generated files will be output to the dist folder。

from https://github.com/Tai7sy/OneDriveFly

---------------------------------------------------------------------------------------------------------------------

OneDriveUploader:多线程上传文件/文件夹到OneDrive的工具,支持Linux、Windows、MacOS


这个工具是我现在用到的最好用的,建议使用!
一、OneDriveUploader介绍
支持上传文件和文件夹到指定目录,并保持上传前的目录结构.
支持命令参数使用, 方便外部程序调用.
支持自定义上传分块大小.
支持多线程上传(多文件同时上传).
支持根据文件大小动态调整重试次数
二、OneDrive授权
然后会获取到一个网址,不要关闭,后面用到。
三、LInux下,OneDriveUploader的使用
1、下载,并给权限
wget https://raw.githubusercontent.com/MoeClub/OneList/master/OneDriveUploader/amd64/linux/OneDriveUploader -P /usr/local/bin/
chmod +x /usr/local/bin/OneDriveUploader
2、初始化
OneDriveUploader -a "url"
把url替换为上图浏览器中获得的地址,以http://loaclhost开头的。一次授权,以后就不会用到了。
3、配置文件
授权成功后,就在同目录生成了配置文件 auth.json (所以,为便于操作,选择个好记的目录执行 初始化)
修改配置文件,也可以不修改,我主要是改了线程
4、使用命令,所有命令后面的参数都要有英文双引号 “”
-s // *必要参数,要上传的文件或文件夹
-r // 上传到网盘中的某个目录,默认: 根目录
-t // 线程数, 同时上传文件的个数. 默认: 2
-b // 自定义上传分块大小, 可以提高网络吞吐量, 受限于磁盘性能和网络速度.
-c // 配置文件路径
-f // 开关
// 加上 -f 参数,强制读取 auth.json 中的块大小配置和多线程配置.
// 不加 -f 参数, 每次覆盖保存当前使用参数到 auth.json 配置文件中.
-n // 上传单个文件时,在网盘中重命名
5、使用举例
# 将同目录下的 mm00.jpg 文件上传到 OneDrive 网盘根目录

OneDriveUploader -s "mm00.jpg"

# 将同目录下的 mm00.jpg 文件上传到 OneDrive 网盘根目录,并改名为 mm01.jpg
OneDriveUploader -s "mm00.jpg" -n "mm01.jpg"

# 将同目录下的 Download 文件夹上传到 OneDrive 网盘根目录
OneDriveUploader -s "Download" 

# 将同目录下的 Download 文件夹上传到 OneDrive 网盘Test目录中
OneDriveUploader -s "Download" -r "Test"

# 将同目录下的 Download 文件夹上传到 OneDrive 网盘Test目录中, 使用 10 线程
OneDriveUploader -t 10 -s "Download" -r "Test"

# 将同目录下的 Download 文件夹上传到 OneDrive 网盘Test目录中, 使用 15 线程, 并设置分块大小为 20M
OneDriveUploader -t 15 -b 20 -s "Download" -r "Test"
6、如果文件多、大,可让程序后台运行:nohub OneDriveUploader -s “文件或目录” &
四、Windows下,OneDriveUploader的使用
下载软件到英文目录,最好简单些。
然后 win + R,输入 cmd,进入命令行。
剩下的操作和Linux一样,只是文件为 OneDriveUploader.exe
五、MacOS,咱没有,就不说了。
另外,loc有网友做了个更傻瓜的win下客户端:ODUG
设定说明
OneDrive目录:如目录不存在将自动创建目录.
线程:多线程上传,默认3,可自行修改.
块大小:上传分块大小,默认10MB,可自行修改.
注:
1、软件支持单文件和目录上传
2、上传到OneDrive只支持根目录和二级目录,不支持三级目录
3、软件目录可整体移动,目录内文件不可移动,不可改名,不可缺失,否则将不可使用!
---------------

OneDriveUploader,一个好用的OneDrive网盘上传工具,支持文件和文件夹上传



使用Golang基于新的API写了个效率更高的上传工具,同时也修复了各种Shell版本遗留下来的小问题,该版本特点就是授权简单,无需依赖,单文件。同样的也可以配合Aria2一起自动上传,这里就再分享下,方便下有需求的人。

更新

【2019.12.21】
 支持跳过网盘中已存在的同名文件。

【2019.12.20】
目前同时支持国际版、个人版(家庭版)、中国版(世纪互联)。

【2019.12.15】
修复授权失败、上传文件大小为0等问题。
现已支持armx86x64平台的系统。

【2019.11.29】
新增多线程上传、MacOS客户端。
修复了一个致命bug,建议之前装过的更新下程序。

功能

  • 支持上传文件和文件夹到指定目录,并保持上传前的目录结构。
  • 支持命令参数使用,方便外部程序调用。
  • 支持自定义上传分块大小。
  • 支持多线程上传(多文件同时上传)。
  • 支持根据文件大小动态调整重试次数,对抗不好的网络环境。
这里只详细说下Linux的用法,Windows后面大概说下。
WindowsMacOS系统下载地址→传送门,直接将程序下载到本地后,按照下面方法进行授权、初始化,然后就可以使用命令上传了。
1、授权认证
点击右侧URL登录并授权,授权地址→【国际版、个人版(家庭版)】、【中国版(世纪互联)】。
授权后会获取一个localhost开头打不开的链接,这里复制好整个链接地址,包括localhost
2、安装OneDriveUploader
#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
3、初始化配置
#国际版,将url换成你上面复制的授权地址,包括http://loaclhost。
OneDriveUploader -a "url"

#个人版(家庭版),将url换成你上面复制的授权地址,包括http://loaclhost。
OneDriveUploader -ms -a "url"

#中国版(世纪互联),将url换成你上面复制的授权地址,包括http://loaclhost。
OneDriveUploader -cn -a "url"
如果提示Init config file: /path/to/file/auth.json类似信息,则初始化成功。
4、使用命令
Usage of OneDriveUploader:
  -a string
        // 初始化授权
        Setup and Init auth.json.
  -b string
        // 自定义上传分块大小, 可以提高网络吞吐量, 受限于磁盘性能和网络速度.
        Set block size. [Unit: M; 5<=b<=60;] (default "10")
  -c string
        // 配置文件路径
        Config file. (default "auth.json")
  -n string
        // 上传单个文件时,在网盘中重命名
        Rename file on upload to remote.
  -r string
        // 上传到网盘中的某个目录, 默认: 根目录
        Upload to reomte path.
  -s string
        // *必要参数, 要上传的文件或文件夹
        Upload item.
  -t string
        // 线程数, 同时上传文件的个数. 默认: 2
        Set thread num. (default "2")
  -f
        // 开关(推荐)
        // 加上 -f 参数,强制读取 auth.json 中的块大小配置和多线程配置.
        // 不加 -f 参数, 每次覆盖保存当前使用参数到 auth.json 配置文件中.
        Force Read config form config file. [BlockSize, ThreadNum]
  -skip
        // 开关
        // 跳过上传网盘中已存在的同名文件. (默认不跳过)
        Skip exist file on remote.
  -cn
        // 开关
        // 授权中国版(世纪互联), 需要此参数.
        OneDrive by 21Vianet.
  -ms
        // 开关
        // 授权个人版(家庭版), 需要此参数.
        OneDrive by Microsoft.
5、命令示例
#将当前目录下的mm00.jpg文件上传到OneDrive网盘根目录
OneDriveUploader -c /path/to/file/auth.json -s "mm00.jpg"

#将当前目录下的mm00.jpg文件上传到OneDrive网盘根目录,并改名为mm01.jpg
OneDriveUploader -c /path/to/file/auth.json -s "mm00.jpg" -n "mm01.jpg"

#将当前目录下的Download文件夹上传到OneDrive网盘根目录
OneDriveUploader -c /path/to/file/auth.json -s "Download" 

#将当前目录下的Download文件夹上传到OneDrive网盘Test目录中
OneDriveUploader -c /path/to/file/auth.json -s "Download" -r "Test"

#将同目录下的Download文件夹上传到OneDriv网盘Test目录中,使用10线程
OneDriveUploader -c /path/to/file/auth.json -t 10 -s "Download" -r "Test"

#将同目录下的Download文件夹上传到OneDrive网盘Test目录中,使用15线程,并设置分块大小为20M
OneDriveUploader -c /path/to/file/auth.json -t 15 -b 20 -s "Download" -r "Test"
/path/to/file/auth.json为初始化时,生成的auth.json绝对路径地址,本文默认/root/auth.json,自行调整。
注意:如果你之前上传手动中断过,再上传的时候,请使用-skip参数,默认会跳过你已经上传过的文件/文件夹。

Aria2自动上传

同样的这里也会提供个配套的Aria2自动上传脚本.
上传脚本代码如下:
#!/bin/bash

GID="$1";
FileNum="$2";
File="$3";
MaxSize="15728640";
Thread="3";  #默认3线程,自行修改,服务器配置不好的话,不建议太多
Block="20";  #默认分块20m,自行修改
RemoteDIR="";  #上传到Onedrive的路径,默认为根目录,如果要上传到MOERATS目录,""里面请填成MOERATS
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}"
  if [[ $? == '0' ]]; then
    rm -rf "${FileLoad}";
  fi
  IFS=$IFS_BAK
}
LoadFile;

Windows使用

这里就随便补充下Windows使用,先下载程序文件,下载地址→传送门
比如我将exe文件放到D盘,然后使用Win+R,输入CMD运行,调出窗口后,使用命令:
#进入D盘
cd /d D:\

#国际版初始化,将url换成你上面复制的授权地址,包括http://loaclhost。
OneDriveUploader.exe -a "url"

#个人版(家庭版)初始化,将url换成你上面复制的授权地址,包括http://loaclhost。
OneDriveUploader.exe -ms -a "url"

#中国版(世纪互联)初始化,将url换成你上面复制的授权地址,包括http://loaclhost。
OneDriveUploader.exe -cn -a "url"
然后上传命令和上面一样,只需要把OneDriveUploader改成OneDriveUploader.exe即可。
最后经测试,该版本的上传已经完全能应对各种稀奇古怪的字符问题,如果有问题可以回复下,贴上报错代码,方便修复.
------------------
Onedrive List - 极易部署的 Onedrive List 服务.

GONEList

Build Status Latest Release All Releases Download

这是一款使用 golang + vue 编写的基于 onedrive 的在线共享网盘 效果展示:https://gonelist.cugxuan.cn
后端项目地址:https://github.com/gonelist/gonelist
前端项目地址:https://github.com/gonelist/gonelist-web
详细文档地址:https://gonelist-doc.cugxuan.cn
有问题请提 issue,也可以进入 QQ 群交流,群号:1083165608

功能特性

  • 「跨平台」,兼容 Linux/Windows/MacOS 等多个平台
  • 「极速部署」,下载对应程序,修改配置即可前后端一键部署
  • 「直链下载」,文件直链下载,下载不消耗服务器流量
  • 「自动刷新」,自动刷新缓存,可自定义时间
  • 「自定义目录」,支持将 onedrive 的某个目录作为根目录
  • 「在线播放」,支持在线播放音频和视频,在线浏览图片
  • 「海量文件」,支持单目录下上千个文件,正常使用
  • 「多平台」,支持个人版、教育账号、世纪互联等
  • 「README」,支持页面添加 README
  • 「加密目录」,支持给目录加密
  • 「登陆缓存」,登陆 onedrive 之后会有缓存,下次直接启动无需登录
  • ...

注:支持绝大部分教育账号,部分 教育账号 因为需要管理员同意无法使用

安装配置

实体服务安装教程

如果您的整个微软账号和 onedrive 网盘内,没有隐私内容,可以按照下面的流程快速配置体验效果,完整的下载安装流程请看 安装文档

快速配置体验

下载 Github Release 或者 gonelist-release 中对应的包,Linux 系统下载 gonelist_linux_amd64.tar.gz,直接运行即可启动,以 Linux 系统本地启动为例

// 下载对应的安装包,也可下载 gonelist-release 中的包,下面命令不一定是最新版本
$ wget https://github.com/cugxuan/gonelist/releases/download/v0.4.1/gonelist_linux_amd64.tar.gz
$ tar -zxf gonelist_linux_amd64.tar.gz && cd gonelist_linux_amd64
$ ./gonelist_linux_amd64

打开 http://localhost:8000 按照提示登录后即可。如果是在本地部署,登陆成功会跳转到首页,此时已经完成部署。
如果是在服务器部署,登陆成功会跳转到 http://localhost:8000/auth?code=xxx ,将当前网址改成 http://yoursite:8000/auth?code=xxx 再回车等待文件加载后,会自动跳转你的网站 http://yoursite:8000 。如果登陆后一直没有反应,可能是因为文件夹数量过多导致,建议设置「子文件夹」选项
默认情况下读取当前路径的 config.json 作为配置文件,或加参数 --conf=dir1/file.json 指定配置文件路径

实体systemd服务安装

视频教程(包含了Azure应用程序的配置) https://www.bilibili.com/video/BV1PA411t7Jw/

docker运行

视频教程 https://www.bilibili.com/video/BV1Vz4y1R7EK/

直接使用项目的docker-compose.ymldocker-compose up -d即可,建议把配置文件放在一个文件夹里,把文件夹挂载进去,否则直挂文件docker挂载的是inode。 如果是群晖的docker上运行的话会不支持docker的command似乎,可以把配置文件的目录挂载到容器里,例如/etc/config,创建容器的时候加上环境变量CONF_PATH=/etc/config/config.json。 token_path写/etc/config/,然后创建容器的最后地方的Entrypoint命令空着

.
├── config
│   └── config.json
└── docker-compose.yml

config.json

如果需要修改配置,在配置文件中填对对应的内容即可

{
  //------建议填入自己的 id 和 secret --------
  "client_id": "16e320f7-e427-4612-88da-f3d03e944d40",
  "client_secret": "lURpL3U@bBlmJ0:_dnU.LeLOGNGdVT30",
  "redirect_url": "http://localhost:8000/auth",
  // 设置一个自己喜欢的字符串
  "state": "23333",
  // token 的路径,推荐默认
  "token_path": "",
  // 下载链接重定向前缀
  "download_redirect_prefix": "",
  "server": {
    // 监听的端口
    "port": 8000,
    // 自动刷新的时间单位是分钟,默认 10 分钟,不要超过 1 小时
    "refresh_time": 10,
    // 登陆成功后,跳转的 URL,可不设置,新版已自动跳转
    "site_url": "http://localhost:8000",
    // 自定义 onedrive 的子文件夹
    "folder_sub": "/",
    //静态页面的目录,默认当前路径下的dist目录
    "dist_path": "./dist/",
    // 是否绑定到 0.0.0.0
    "bind_global": true,
    // 是否打开 gzip 加速
    "gzip": true
  },
  // 世纪互联设置
  "china_cloud": {
    "enable": false,
    "client_id": "2b54b127-b403-42a3-8b55-d25f3119aa13",
    "client_secret": "a0CGqBT3f_8U5gztxKjxR-LNW-ZnTe.m"
  },
  // 给文件夹设置密码,相比此方法,更加建议直接在文件夹下的创建 .password 设置密码
  "pass_list": [
    {
      "path": "",
      "pass": ""
    }
  ]
}
from https://github.com/gonelist/gonelist
---------
gone is a server which indexes your OneDrive files

gone是受oneindex启发而开发的,基于golang的OneDrive索引工具。

Demo

  1. 使用命令cp example.conf prod.conf复制一份新的配置文件
  2. 准备一个域名example.com并启用HTTPS,将https://example.com/authcallback填入prod.conf里的RedirURL字段
  3. 访问https://apps.dev.microsoft.com/#/appList进行添加应用
  4. 应用程序ID填入prod.conf的ClientID字段
  5. 生成新密码,将值填入prod.conf的ClientSecret字段
  6. 添加平台,选择Web,将https://example.com/authcallback填入重定向 URL
  7. 保存修改
  8. 在prod.conf里的Password字段内填入一个密码,该步骤必须
  9. 使用命令go run *.go -c prod.conf -l :8080启动gone,反代8080端口https://example.com
  10. 打开浏览器访问https://example.com/?auth=密码,按照提示授权
  11. 完成

配置文件

配置选项:

  1. Headerstring: 指定header.html的路径
  2. Footerstring: 指定footer.html的路径
  3. Ignorestring: 指定哪些文件被显示的文件名正则表达式
  4. Prefetchstring: 指定哪些文件可以被本地缓存的文件名正则表达式
  5. Faviconstring: 指定favicon的路径
  6. DisableReadmebool: 不渲染readme
  7. CacheSizeint: 目录缓存大小
  8. CacheTTLint: 目录缓存有效期
  9. PrefetchSizeint: 本地缓存大小,单位为MB

from https://github.com/coyove/gone
------

魔改版本,为 OLAINDEX 添加多网盘挂载及一些小修复.

OLAINDEX Magic

Another OneDrive Directory Index.

本项目受 Oneindex 启发,借鉴其部分功能,在这里感谢。 项目持续开发,会加入更多功能,欢迎大家提交 issue.

简介

魔改自:https://github.com/WangNingkai/OLAINDEX (只不过是在大佬的作品上狗续貂尾罢了。

演示站点:https://magic.yukino.co/

安装方法

原教程:https://github.com/YukiCoco/OLAINDEX-Magic/blob/master/docs/install.md

绑定&使用多账户:https://neko.re/archives/95.html

此项目长期维护,请直接拉取 Master 分支部署,欢迎提交 issue,欢迎 star

魔改内容

  • 多 Onedrive 账户支持:
    • 可同时挂载多个 Onedrive 网盘
    • 图床可选择上传到不同的盘区
    • 多网盘命令支持
    • 同时支持国际版/世纪互联
  • 离线下载(已废除):
  • 一些小修复:
    • 一键获取所有下载链接(配合 AriaNg 可下载所有文件)
    • 图床:添加复制链接、修复上传失败问题
    • Ajax 删除文件
    • ......

常见问题

https://github.com/YukiCoco/OLAINDEX-Magic/blob/master/docs/question.md


from https://github.com/YukiCoco/OLAINDEX-Magic