MENU

利用微软 Onedrive API 和腾讯云 SCF 免费搭建个人网盘

2019 年 09 月 01 日 • 阅读: 1497 • 后端

演示地址

演示资源地址

SCF 简介

腾讯云云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码,是实时文件处理和数据处理等场景下理想的计算平台。您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。

无服务器(Serverless)不是表示没有服务器,而表示当您在使用 Serverless 时,您无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。核心的代码片段完全由事件或者请求触发,平台根据请求自动平行调整服务资源。Serverless 拥有近乎无限的扩容能力,空闲时,不运行任何资源。代码运行无状态,可以轻易实现快速迭代、极速部署。

开通 SCF 云函数服务的用户,每月可享受一定量的 免费资源使用量,免费调用次数。每月计费时,会先抵扣免费额度,超出部分再进行后付费结算。

资源类型每月免费额度
资源使用量40 万 GBs
调用次数100 万次

下图是我一天的使用量,大概调用 1000 次,如果是 30 天就是 3 万次。资源使用量 500 GBs,30 天就是 1.5 万 GBs。可见,免费额度完全足够使用。需要说明的是,文件链接地址都是微软服务器,并不经过 SCF。并且,下图是包括网盘在内的 11 个函数的总使用量。

@YL51PJT6NML6PZW{TAI.png

获取 Onedrive 账号

既然是利用 Onedrive,首先要获取一个账号,支持个人、企业和教育版。打个广告,我的 杂货铺 里有含 5T 空间的 Onedrive 教育账号,限时优惠 1 元/个,购买后可直接使用。

创建函数服务

有了账号后就可以创建函数了。登录 腾讯云 SCF 控制台(在此之前要完成腾讯云 实名认证),点击左侧菜单栏的 函数服务,接着点击顶栏的地区选择下拉框,选择 香港,因为大陆区域在绑定域名时需要备案,如果你拥有已备案的域名,则可以选择国内,当然不绑定域名也可以使用。接着点击蓝色的 新建 按钮,创建函数。

create_a_function

随后在新建函数页面填写 函数名称,名字随意;运行环境 选择 Php 7.2创建方式 选择 模板函数;选择 helloworld 模板,最后点击最下方的 下一步。进入 ② 函数配置 页面后不做任何修改,直接点击 完成

GX<code>VWO~RYU4QSIHM</code>EE_{PG.png

上传函数代码

下载并解压 Tai7sy 大佬的项目 OneDrive_SCF。随后,进入 SCF 函数代码 面板,将 提交方法下拉框 的值改为 本地上传文件夹,随后点击 上传,选择 解压好的文件夹,最后点击 保存。注意,解压后查看一下是否包含两层文件夹,如果是,上传内层。

D5OFS6O`X7}$VW)B3$UTQA.png

添加触发方式

进入函数服务的 触发方式 面板,点击 添加触发方式。选择触发方式下拉框中的 API网关触发器,勾选下方的 启用集成响应,点击 保存

SC6P6_()$O$FK7_IB_S3(}4.png

稍等片刻,下方会出现一个 访问路径,点击打开它。

2UV{Q5H@V13S956@IWG7`2.png

获取并填写 refresh_token

打开 函数 API 网关访问路径 后,点击其中的 Get a refresh_token,在打开的微软账号登录页面中,填写你的 Onedrive 账号和密码,完成登录。

5}R<code>T]W</code>_6)TC%RBYPYG8UV.png

登录完毕后会跳转到 localhost,并提示无法访问此网站。

S(ATUX0T4`F7C75G%QZWW)Q.png

将网址栏的 localhost 替换为 函数 API 网关访问路径 后回车。

CZ46{HC2Q%M4XO(%`07ZXV.png

稍等片刻便会返回 refresh_token,复制它备用。

C6QSEL5POOL75U

进入 SCF 函数代码 面板,选中 index.php,将得到的 refresh_token 粘贴进,下图所示的单引号之间,最后点击靠近左下方的 保存

UUU{L_%MUDV1I}YSTPXZ2.png

配置环境变量

进入 函数配置 面板,点击靠近右上角的 编辑 按钮。

_SP7_T$@DA}LQRVA3SG}44G.png

在新面板中,将 内存 修改为 最大值,当然 64M 也是可以运行的,需要说明的是,内存越大可用的免费时长越少,不过一般是够用的;超时时间 填写 30,随后添加 5 个环境变量,它们的功能如下:

keyvalueintro
sitename站点名称
public_path公开展示的 Onedrive 根路径未绑定自定义域名时使用
private_path公开展示的 Onedrive 根路径绑定了自定义域名时使用
passfile密码文件名称在某目录下添加该文件,里面写入密码即可加密文件夹
admin管理员密码管理员登录后功能更多

1J8I6IJD@2J8AIH8WWQ4KM.png

所有信息填写完毕后点击保存,刷新 函数 API 网关访问路径,即可访问你的 Onedrive 网盘。

_Z_QK7_3G}T}IGT4WZ`{)E.png

自定义域名(可选)

进入函数服务的 触发方式 面板,点击打开 SCF_API_SERVICE

_H1UQ7TU$31)R54B97VK$S.png

打开服务界面的 自定义域名 面板,点击 新建

47Q4Z)PLOV{AC@AFFIS5.png

在添加域名对话框中,填写你的 域名协议 选择 http,如果你想使用 https,则必须在腾讯云 申请或上传 SSL 证书,如果你已经在其他平台申请过推荐直接上传,因为申请一般要等待数小时才能完成。未进行上述操作你看到的 证书下拉框 里将会是。网络类型勾选 外网。选择 自定义路径映射,添加一条记录,路径为 /,指向 发布 环境。

I%G@QBED$T6OJ.png

打开你的域名解析服务商控制台,在域名解析列表里添加一条 CNAME 记录,值便是图中上方的 外网二级域名。最后点击 提交

进入 管理 API 面板,点击 编辑

7K.png

前端配置 面板中,将路径改为 /,点击下一步。

MU0D8F.png

后端配置 中,保证已勾选 启用集成响应 后点击 下一步

TZDO.png

响应结果 面板,将 返回类型 改为 HTML,点击 完成

afaPU.png

在弹出的对话框中,点击 前往发布服务

fafadfEGM.png

服务信息 面板,点击靠近 右上角发布 按钮。

fafadUHOH8MI5.png

在弹出的 发布服务 对话框中,将 发布环境 改为 发布备注 随意填写,最后点击 提交

8WBC7C0UQfadf.png

现在就可以通过自定义域名访问你的网盘了。

http 转 https(可选)

如果你使用了 https,可以通过在 html 头部添加 js 的方式实现 http 跳转 https

复制以下 js 代码,粘贴到 函数代码 面板里的 index.php 文件的 609 行左右,点击靠近左下方的 保存

<script>
  if (location.protocol === "http:") {
    location.href = location.href.replace(/http/, "https");
  }
</script>

}N2UR<code>L5P1$(A{H6VXNN</code>1P.png

现在使用 http 协议访问,查看是否自动跳转 https

使用 Github Pages 缩短长链接(可选)

如果你没有域名和服务器,可以通过 Github Pages 跳转的方式,适当缩短首次访问的路径长度,最终可以通过 username.github.io 打开你的网盘。

注册并登录 Github,随后打开 该仓库,点击靠近右上角的 Fork。稍等片刻,打开页面中部的 index.html

YSG)}(}WF$V6(I8Z(RF7FK.png

点击靠近 右上角铅笔 按钮,编辑该文件。

fafdafdafQA.png

将你的 函数 API 网关访问路径 替换到文件中。

%{$U69~_}~DAL0($(U9@D`9.png

修改完毕后点击靠近页面最下方的 Commit changes

`56PL$O1D}(V2P@4WR%P6B.png

点击靠近右上角的 Settings,将 Repository name 改成 你的 Github 用户名.github.io,随后点击 Rename

@(S16VV$)48~O8MHD6KYB5D.png

下拉该页面,找到 Github Pages,将 Source 下拉框的值改成 master branch,如果已经是则无需修改。

}`R6~2N@)LINVXYJ5LEP59.png

现在,就可以通过 你的 Github 用户名.github.io 访问网盘了。

最后编辑于: 2019 年 09 月 08 日
添加新评论

已有 33 条评论
  1. 盛夏 盛夏     Android Oreo /    QQ浏览器

    纠正一下:腾讯云及其他云申请域名证书不需要将域名转入至其平台

    1. LOGI LOGI     Windows 10 /    Google Chrome

      @盛夏感谢提醒,是我孤陋寡闻了,不过阿里的函数服务是支持证书上传的。另外,不睡了吗@(滑稽)

  2. 奕奕 奕奕     Windows 10 /    Google Chrome

    自定义域名出错了,提示{"message":"There is no api match env_mapping '/'"}
    不知道是哪一步的问题

    1. 奕奕 奕奕     Windows 10 /    Google Chrome

      @奕奕自定义域名加上环境名就可以访问,直接域名不行

    2. 奕奕 奕奕     Windows 10 /    Google Chrome

      @奕奕搞定了

    3. LOGI LOGI     Windows 10 /    Google Chrome

      @奕奕是我疏忽了,现已加上。@(太开心)

    4. MM MM     Windows 10 /    Google Chrome

      @奕奕自定义域名怎么搞

    5. 奕奕 奕奕     Windows 10 /    Google Chrome

      @MM修改路径就好,这样就不用域名加路径访问了,博主已经改了教程,按照他说的弄就行

  3. underworld underworld     MacOS /    Google Chrome

    想问下,这个可以让他人注册使用吗?还是只能我自己上传别人只能下载?@(勉强)

    1. LOGI LOGI     Windows 10 /    Google Chrome

      @underworld目前不能注册,任何人使用管理员密码登录可以上传 4M 以内的文件。所以一般是所有者使用客户端上传,访问者只能下载。

    2. underworld underworld     MacOS /    Google Chrome

      @LOGI还想问下博主,这个能不能设置私密文件夹,要密码才能看的那种?@(太开心)

    3. LOGI LOGI     Android Pie /    Google Chrome

      @underworld可以的,如果你添加了文中的几个环境变量,那么某个在文件夹下新建一个 .password 文件,用记事本把密码写进去保存就可以加密这个文件夹了。

  4. underworld underworld     MacOS /    Google Chrome

    hhhhh,我在腾讯云有ssl和备案好的域名,一个小时就搞定了,吹爆博主!@(吐舌)

    1. MM MM     Windows 10 /    Google Chrome

      @underworld自定义域名怎么搞

    2. underworld underworld     iPhone /    Google Chrome

      @MM就按照博主的教程啊,自己创一个cname域名解析,绑定就好

  5. 小新 小新     Windows 10 /    Google Chrome

    你好呀,为什么“将网址栏的 localhost 替换为 函数 API 网关访问路径 后回车。”这一步回车之后,还是提示我要“get a refresh_token” @(乖)

    1. LOGI LOGI     Windows 10 /    Google Chrome

      @小新只替换 localhost,后面的路径和参数都要保留哦

    2. 小新 小新     Windows 10 /    Google Chrome

      @LOGI现在我点开"get a refresh _token"跳出的网页不会再跳转到微软登录界面 而是提示找不到网页"http://localhost/authorization_code?error=access_denied&error_description=“@(惊哭)

    3. LOGI LOGI     Windows 10 /    Google Chrome

      @小新在隐身模式里面打开试试哦

    4. 小新 小新     Windows 10 /    Google Chrome

      @LOGI@(委屈)

    5. LOGI LOGI     Windows 10 /    Google Chrome

      @小新解决不了吗,要不然你加我 QQ,和邮箱同号::quyin:1huaji::

  6. underworld underworld     MacOS /    Google Chrome

    再想问下博主,您的网盘播放器是怎么设置的,我感觉原生的播放器播放速度好慢啊,特别是开头缓冲时间太久了@(乖)

    1. LOGI LOGI     Windows 10 /    Google Chrome

      @underworld用这个 文件 替换 index.php 就行了,记得把 refresh_token 换成你的,不过速度可能并不会提升@(捂嘴笑)

    2. LOGI LOGI     Windows 10 /    Google Chrome

      @LOGIhttps://disk.ml/Linux/Sources/OD-SCF/index.php/

    3. underworld underworld     MacOS /    Google Chrome

      @LOGI好滴!请问博主是不是网盘的域名用了cdn?怎么那么快?@(你懂的)

    4. LOGI LOGI     Windows 10 /    Google Chrome

      @underworld没有,可能我用的第一版功能少吧

    5. underworld underworld     MacOS /    Google Chrome

      @LOGI博主,我今天安装解析到域名后出现:{"message":"There is no api match uri '/' host 'cmzx.ecut.cloud'"} 您知道怎么回事吗?哪个步骤出问题了呢?@(乖)

    6. LOGI LOGI     Windows 10 /    Google Chrome

      @underworldCNAME 没问题,[自定义路径映射] 或者 [ 前端配置 ] 的路径错了,再仔细看一遍文章的自定义域名部分哈

  7. wz wz     Windows 10 /    Google Chrome

    请问怎么替换index.php文件啊

    1. LOGI LOGI     Windows 10 /    Google Chrome

      @wz用记事本打开复制粘贴@(你懂的)

    2. wz wz     Windows 10 /    Google Chrome

      @LOGI感谢回复,弄好之后,不知道真懂还是假懂的客服提醒我说,就算我上传文件到网盘属于外网流量会后收费,所以想问下这个免费额度究竟包括哪些流量,适合将大量资源共享出来让多人下载吗

    3. LOGI LOGI     Android Pie /    Google Chrome

      @wz客服不是专门搞技术的,不可能知道每个应用的原理,放心分享就行了,SCF 只负责解析直链并返回,所以只扣少量的 HTTP 请求和 HTML 响应流量。

    4. wz wz     Windows 10 /    Google Chrome

      @LOGI万分感谢