暂时停更
请务必更新最新版 修复了一个可能导致越权读取文件夹的隐患
TCShare v3
多云盘目录列表程序
支持Onedrive 国际版和世纪互联 天翼云API 和彩云
【配置文件可视化编辑器绝赞咕咕咕中】
安装教程:这里
License
本项目使用LGPL协议开源。
用户协议
- 凡以任何方式安装、使用本项目者,均被视为自愿接受LGPL与此协议。
- 使用本项目挂载各大云盘,均被视为自愿接受各云盘服务协议及相关法律法规。
- 请勿使用本项目分发违反云盘服务协议或相关法律法规的文件
- 因不当使用本软件而导致的任何意外、疏忽、合约毁坏、诽谤、版权或其他知识产权侵犯及其所造成的任何损失(如以上第三条),本项目概不负责,亦不承担任何法律责任。
Demo
天翼云
和彩云
OneDrive国际
OneDrive世纪互联
安装方式:
若你要挂载一个网盘到/
:
- 获取一个API,并设置环境变量(如SCF等)或填入
.env
或.env.local
中 - 上传到服务器,用composer安装依赖
- 配置伪静态
- 访问
/-install
进行账号授权,获取token。 - 记得每个月访问
/-renew
续期一次。续期的时候不需要重新填写token。 - OneDrive不需要手动续期。
若将网盘挂载到/disk
,则授权地址会变成/disk/-install
、/disk/-renew
,回调地址会变成/disk/-callback
,请注意区分。
v3版本仅支持使用.env文件或环境变量配置。
请一定禁止访问env文件!
# XS 是前缀
# | -KEY 是配置种类,可选KEY,APP,SEC
# | | - -ct是key的ID(类似config.php)
# | | - | - something是配置名称
# | | - | - | - - - - value在等号右边
# XS_KEY_ct_something=value
#天翼云配置
XS_KEY_ct=ctyun #必填,值为ctyun
XS_KEY_ct_FD= #应用文件夹名
XS_KEY_ct_AK= #AK
XS_KEY_ct_SK= #SK
#Onedrive配置
XS_KEY_od=onedrive
#世纪互联配置
XS_KEY_od=onedriveCN
# 这里APP后面的可以是任意值,一般就123456下去
# ↓
XS_APP_1=/ #挂载路径
XS_APP_1_NAME=TCShare #网盘名称
XS_APP_1_THEME=mdui #界面主题
XS_APP_1_BASE=/ #网盘内路径
XS_APP_1_KEY=ct #对应上面Key的ID
OneDrive特别说明
程序已经内置了一组OneDrive的Client ID和Secret,正常情况下不需要手动设置。
你的授权会经过https://tcshare-r.now.sh
中转。该网页为纯静态页面,源码位于_app/redirect/index.html
,不会获取您的个人信息。如仍有疑虑,你可以配置自己的应用:
XS_KEY_od_AK=client_id
XS_KEY_od_SK=client_secret
XS_KEY_od_FD=redirect_uri #格式:http://domain/_app/redirect
SharePoint使用方式
前期配置与onedrive相同,只需要在app配置处加上
XS_APP_<id>_MODE=sharepoint
XS_APP_<id>_SITE=
#sharepoint的网站名,若地址是http://xxx.sharepoint.cn/site/<name>,只要填写<name>这部分
也就是说你可以一个key挂一个od和多个sharepoint。
和彩云使用方式
- 正常登录和彩云,记得勾选【下次自动登录】。
- 打开这个地址。
- 复制里面所有内容,两边加上单引号(重要!),填入到配置文件/环境变量的
XS_KEY_<name>_TOKEN
字段中 - 理论上可用。和彩云cookie有效期理论一年,够用了。
- 为什么不做自动登录?因为有验证码。
配置示例:
XS_KEY_cm=caiyun
XS_KEY_cm_TOKEN='{"cyToken":"******|*|RCS|******|******","encryPhone":"******"}'
XS_APP_<id>_NAME="TCShare 和彩云"
XS_APP_<id>_THEME=mdui
XS_APP_<id>_BASE=/
XS_APP_<id>_KEY=cm
XS_APP_<id>=/caiyun
由于和彩云服务端接口限制,在线播放视频将默认播放经过和彩云服务器转码后的文件,这将导致视频分辨率降至720p
(1280x720),码率降至1Mbps
。
这不会影响文件下载(包括外链播放)。如果遇到外链播放失败的问题,可以尝试在链接后加上?TC_transcode
请求转码链接。
你也可以在配置文件中加入XS_APP_<id>_NO_TRANSCODE=true
禁用转码功能,但这可能导致部分情况下视频播放失败(如目前已知iOS设备无法播放)。
如仅希望对iOS设备启用转码,可以设置XS_APP_<id>_NO_TRANSCODE=except_ios
。
功能
已支持
- 文件下载
- 文件夹打包下载(仅和彩云)
- 视频播放 (mp4,webm,mkv),PC使用ArtPlayer,手机使用DPlayer
- 视频外挂字幕,需为同名在同目录下。目前支持ass特效字幕(ASS.js),PC支持srt(artplayer自带)
- 音频播放 (mp3,aac,m4a,flac,ogg,wav) 使用APlayer
- Office预览 (doc(x),ppt(x),xls(x),pdf)
- 图片预览 (bmp,jpg,jpeg,png,gif,webp),使用glightbox
- 多盘
- 腾讯云函数(SCF)
- 数据缓存(文件,memcache,redis)
- 密码加密
- 防盗链
- Token鉴权
- 服务器直接输出(1M以下,
?TC_direct
) - header,readme
- WebDav
TODO
- 更多文件类型的预览
Rewrite规则:
Apache:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
<FilesMatch "^\.">
Order allow,deny
Deny from all
</FilesMatch>
Nginx:
try_files $uri $uri/ /index.php$is_args$args;
location ~ /\.env {
deny all;
}
WebDav
TCShare现已支持只读的WebDav,但需要在配置文件里手动启用:
XS_APP_<id>_DAV=true
之后即可通过https://tcshare/
或者https://tcshare/-dav
使用WebDAV了。
若需访问加密文件夹,请设置WebDAV独立密码:
XS_APP_<id>_DAV_AUTH=username:password
你还可以设置如下参数,这样https://tcshare/
将无密码且无法访问加密文件夹,https://tcshare/-dav
将有密码且可以访问加密文件夹。
XS_APP_<id>_DAV_AUTH_ONLY_STANDALONE=true
Nginx配置问题
若使用WebDAV时Nginx报405 Method Not Allowed
错误,请在Rewrite规则里增加如下:
set $sep "?";
if ( $is_args = "?" ){
set $sep "&";
}
error_page 405 =200 $uri${sep}_FORCE_METHOD=$request_method;
配置缓存
默认情况下,TCShare将使用文件缓存数据,您可以设置如下配置而是用memcache或Redis:
XS_CACHE_MODE=memcached
XS_CACHE_PATH=memcached://127.0.0.1:11211
# XS_CACHE_PATH=memcached:///tmp/memcached.sock
# XS_CACHE_PATH=memcached://127.0.0.1:11211;memcached://127.0.0.12:11211
# https://symfony.com/doc/current/components/cache/adapters/memcached_adapter.html
XS_CACHE_MODE=redis
XS_CACHE_PATH=redis://127.0.0.1:6379
# XS_CACHE_PATH=redis:///tmp/redis.sock
# https://symfony.com/doc/current/components/cache/adapters/redis_adapter.html
安全规则
支持密码保护、Token鉴权、Referrer防盗链三种方式。 该功能仅支持在环境变量中配置,不支持config.php。 配置如下:
XS_SEC_1=/dir1/*
# 路径规则,参照http://flightphp.com/learn/#routing
# 例如,/dir1 会匹配/dir1 /dir1/
# /dir1/* 匹配 /dir1 /dir1/ 和dir1之下的所有文件
XS_SEC_1_TYPE=referrer
# 模式
XS_SEC_1_MODE=black
# 如果是referrer,设置黑白名单
XS_SEC_1_VAL=baidu.com,google.com
# 黑白名单的域名,逗号分隔
XS_SEC_1_EMPTY=true
# 允许空referrer
# Token鉴权,需要和密码配合使用
# 若token正确优先级在token之后的所有规则都将被跳过
# token不正确将继续下一条规则
# Token计算方式见下
XS_SEC_2=/dir2/*
XS_SEC_2_TYPE=token
XS_SEC_2_VAL=tcshare_demo_key #secret值
# 密码保护
XS_SEC_3=/dir2/*
XS_SEC_3_TYPE=password
XS_SEC_3_VAL=password123
# ↑
# 此数字决定优先级,优先级高的规则将先执行。
# 除了Token之外,其他规则返回失败时将终止程序
# Token失败会跳到下一条规则 争取会忽略下面所有
# 所以目前如需使用token必须在下面放置password。
XS_SEC_<id>_IGNORE=file #此规则对文件无效
XS_SEC_<id>_IGNORE=folder #此规则对文件夹无效
XS_SEC_<id>_IGNORE=mp4;mkv #此规则对mp4 mkv后缀文件无效
Token计算方式
可用于附件CDN等高级用途。
function token($path,$secret,$exps){
$baseTime=1580646002;
// Magic Number, 实际上是2020-02-02 20:20:02 CST, 别管我为啥这么写
$exptime=time()+$exps-$baseTime;
// 过期时间减去上面的magic number
$usign=substr(md5($path.$secret.$exptime),0,16);
// 16位MD5
return $usign.dechex($exptime);
// 16进制的过期时间
}
$path = "/dir1/1.jpg?query_string=should_be_calcuated";
// querystring也需要计算
$secret = "tcshare_demo_key";
$expire = 300;
echo $path."&_tcshare=",token($path,$secret,$expire);
// returns /dir1/1.jpg?query_string=should_be_calcuated&_tcshare=1d435a917e04e8c824eb21
其他配置项
XS_SUBTITLE_FIND='${dir}subs/${name}.srt;${dir}subs/${name}.ass'
# 设置播放器如何搜索字幕文件。仅PC版。记得写配置文件要有两侧单引号。
在腾讯云云函数(SCF)运行
- 下载程序
- 使用
composer
安装依赖 - 上传到腾讯云,函数名是
index.main_handler
- 设置环境变量,然后安装
- 若绑定域名,请增加一条环境变量:
scf_base=/
,其中/
是绑定的路径。 - 设置环境变量的时候注意不需要两侧引号!!!
付费定制等
本程序开发纯属个人需求及爱好,故何时更新、更新什么内容也岁个人兴趣。
如果你喜欢此项目,或需要安装指导等服务,亦或是极度需要某个功能,欢迎赞助。
另可根据需求进行付费定制,如二次开发整合等。