onedrive 很容易获取到,大把的免费A1账号,有很多人也有自己的全局。如果你没有也可以获取本站的账号。https://www.shanyemangfu.com/office365-a1.html
有的时候想要分享一下文件搞个onedrive索引。onedrive索引工具很多了,olaindex ,pyone等等。还有开山之作oneindex。但是白嫖的最高境界就是不花钱就可以免费使用吧。前边的多少需要个web服务器,而我们连这个钱也不想花。那么部署在CF workers上边就是个不错的选择,因为他还给提供了免费的域名使用。博客曾经介绍过一个可以部署在cf workers上边的onedrive索引工具FODI,但是FODI,功能有点少而且总感觉体验不是很好。但是还有大佬开发的OneDrive-Index-Cloudflare-Worker,这个甚至没有html静态页面,也就是我们不需要为前端找服务器了。现在就介绍一下这个新玩具。
项目地址:https://github.com/heymind/OneDrive-Index-Cloudflare-Worker
1.新建app应用
访问如下链接新建应用
https://portal.azure.com/#blade/Microsoft_AAD_RegisteredApps/ApplicationsListBlade
当然需要登录你的账户。
重定向url填写
https://heymind.github.io/tools/microsoft-graph-api-auth
然后记下client_id备用。
2.新建密码secret
保存客户端密码,这就是后文需要的client_secret,保存备用。
3.添加api权限
需要添加offline_access, Files.Read, Files.Read.All
4.获取refresh_token
使用这个工具 microsoft-graph-api-auth 获取 refresh_token 参数
首先填入client id。得到下一步的code。可能需要改成如下图所示,来自作者发布的教程视频。
认证后需要登录授权,授权完成会得到code.作者视频演示的是家庭版code很短,但是我实测E5订阅code很长。code会自动回填入下一步所需要的位置。
然后就可以获取refresh_token了。应用id自己填好了,需要填写第二步获取的client secret。
点击GET TOKEN 得到如下页面。
搜索一下refresh_token,然后复制,引号内的都是。复制好备用。
5.新建 cf worker
复制如下程序代码,到cf workers。
https://github.com/heymind/OneDrive-Index-Cloudflare-Worker/blob/master/index.js
然后修改图中红色部分的参数为前边保存的参数。还有一处需要注意,base那儿需要修改为根目录或者你要分享的目录。因为作者代码中写的是Share,但是你的onedrive可能没有这个文件夹,可能会出现404。
然后保存并部署就可以了,然后修改成你想要的地址,就可以使用了。
6.开启更多功能
中转下载
利用 Cloudflare 服务器中转 OneDrive 中文件的下载,以提高中国大陆的下载体验。已知问题,无法显示下载进度。在配置中开启 proxyDownload 功能,在文件直链路径后面加 ?proxied 即可开启,例如作者提供的测试连接:https://storage.idx0.workers.dev/Other/zero_file?proxied
设置账号密码
修改为true,然后修改账号和密码就行了。
缓存功能
利用 Cloudflare CDN 来缓存 OneDrive 中文件,目前有两种缓存模式:
- 整个文件缓存: 文件会先完整传输到 Cloudflare 的服务器后再返回给客户端。文件太大可能超过 Cloudflare Worker 限制的单次请求运行时间。
- chunk 缓存: 流式传输与缓存,无法正确显示 Content-Length。
在配置中开启 cache 功能,可以配置两种缓存模式的选择以及启用缓存的路径地址。
缩略图功能(默认开启了)
作者提供了如下示例:
对于图片文件,可以直接获取不同尺寸的缩略图。 比如:https://storage.idx0.workers.dev/Images/public-md-image-20191010113652775.png?thumbnail=mediumSquare
小文件上传
可以利用这个工具直接上传小文件到 OneDrive
上 ( 小于 4MB ,OneDrive API 的限制,比这个大就得创建 upload session 反正很麻烦 )
在配置中开启 upload
功能,并设置一个密钥 key
( 防止游客上传文件 )。
比如:
POST https://storage.idx0.workers.dev/Images/?upload=<filename>&key=<key>
注意:开启该功能需要 Files.ReadWrite
权限
但是貌似并没有前端上传界面,应该需要我们自己写个界面或者直接post请求。
图床
同时开启小文件上传和缓存功能可以当做图床使用。还可以配合缩略图功能,取得不同的缩略图放在博客中使用。
作者的示例:
例如 https://blog.idx0.dev 在首页文章列表配图使使用了 large 尺寸的缩略图,在侧栏文章列表中使用了 smallSquare 尺寸的缩略图。
其实也可以直接选择一个目录,比如Images进行缓存,然后把图像传到这个目录即可。你可以使用第三方工具,比如博客曾经介绍过的raidrive。这样就直接可以使用这个图像的链接了。我放了一张图像的测试效果。访问如下图片链接即可。
https://onedrive.symf.workers.dev/Images/QQ20200515163047.png
总结
1.相较于FODI更美观一些。
2.相较于功能较多,但是视频没有在线观看功能。但是有图床功能。
3.cloudflare 现在速度真的不敢恭维,真的慢啊。
参考资料:
- 作者视频:https://www.bilibili.com/video/av89209298/
- 项目地址:https://github.com/heymind/OneDrive-Index-Cloudflare-Worker
文章评论
获取refresh_token时返回{"error":"invalid_request","error_description":"AADSTS90023: Cross-origin token redemption is permitted only for the 'Single-Page Application'及后面一小串不包含refresh_token的信息
@yujiang 多试几次,不要漏掉每一个细节,每一步都不能漏
求教如何默认就中转下载 不要加上proied就可以用
@woku 这个作者没提供,如果想实现,大概只能修改源代码