绪言
我一向是不喜欢用Onedrive/SharePoint直接分享文件的,原因很简单:容易炸。
我相信大多数的OnedriveForBusiness都是白嫖来的,无论是教育版计划,还是E5开发者计划,微软都给你写明白了,不得用于生产环境或商业部署。如果被人举报,或者微软重拳,那是一抓一个准。即使做好了备份,面对成千上万失效的分享链接,修复它们必然是一个浩(痛)大(苦)的工程。
因此我目前使用Cloudreve私有云程序,很好地解决了上述问题。
简述Microsoft Graph api请求逻辑
简单概述微软Graph的API的逻辑(其他网盘基本相同):
我手里有A域的AccessKey(相当于一个令牌),告知微软我要请求这个域下的”A:\GalGame\柚子社\千恋万花.zip”文件(这些通过逻辑最后变成一串url,也就是文件直链),微软验证你的令牌无误,指向的文件有效,于是允许你的下载请求。
如果A域被封了,那么我需要把做备份的B域拉上马使用,此时我需要使用B域+B域的令牌+路径,请求B域下的”B:\GalGame\柚子社\千恋万花.zip”文件,经过这一系列操作,最后得到的直链自然迥异于原本的直链,修复失效链接的工作不可避免。
解决方案
这一棘手的问题有没有一个简单便捷的解决方案呢?答案是有的。
请求的路径是固定的,变化的只有存储的域和它专属的令牌。
如果我们的固定链接只包含这个文件的相对路径,比如”X:\GalGame\柚子社\千恋万花.zip”,X可以是A,B,C,D……一系列域,客户向服务器请求文件时,服务器根据自己的数据库,得知这个固定链接是在请求”X:\GalGame\柚子社\千恋万花.zip”这个文件,然后通过配置文件中预设的令牌,来获得一个临时的下载直链,这样当存储库由A更换到B时,后台只需要将A的令牌更换为B的令牌,就能成功地请求到B域下的文件直链。
Cloudreve基本原理
完美对应。只需要更换AccessKey,就能实现存储库的转换。
网盘运行模式
秉承这一理念,我的资源分享网站几乎都采用这种模式:
其中百度网盘每个月更新一次,做打包的冷存储;阿里云、A1P、E5计划实时同步更新,可以随时顶替位置,最大程度保证分享链接长期有效。
当然,如果微软同时封我几个号,那就非人力所能为也了()
Ps:最近计划购入OnedriveForBusiness商业版计划。