首先放几个栗子:
CuoJue NetDisk
OneNET 对象储存的文件分享
OneNET 云主机远程储存的文件分享
下载的时候可通过提供方域名分辨储存区域
标题写的零成本只是云盘储存空间零成本,云盘系统还是需要自行搭建
搭建 Cloudreve
搭建这个玩意,直接看官方文档吧 安装 - Cloudreve 文档
需要 PHP+MYSQL 环境,需要注意的是,不支持 PHP7.4(ThinkPHP 框架不兼容),目前在 PHP7.2 下运行良好
增加上传策略
增加移动 OneNET 对象储存
本篇文章的核心部分第一节
截止目前 2020-1-2 本服务还是免费的(免费空间 10GB+流量费全免)
注册地址:https://open.iot.10086.cn/cloud/console/object-storage/index
注册后可免费领取对象储存和云服务器等资源,这里先开通对象储存
创建一个对象储存容器和 AccessKey
在 Cloudreve 后台配置
| |
---|
上传策略名称 | 自己取名字 |
AWSAccessKeyId | 填写获取到的 AccessKeyId |
AWSSecretKey | 填写获取到的 SecretKey |
存储桶名称 | 填写容器名称 |
下载根 URL | https://容器名称.oos-cn-wuxi.heclouds.com/ |
上传服务器 URL | https://容器名称.oos-cn-wuxi.heclouds.com/ |
储存区域 | oos-cn-wuxi |
EndPoint | https://oos-cn-wuxi.heclouds.com/ |
配置完毕后修改用户组上传策略然后测试一下上传
增加移动 OneNET 云主机储存
本篇文章的核心部分第二节
截止目前 2020-1-2 本服务还是免费的(免费云主机最大 4 核 8G/免费云盘最大容量 2TB/免费文件储存无限容量)
服务器配置好环境
环境配置好后安装 cloudreve 远程存储服务端
直接下载源码 https://github.com/cloudreve/remote-server 部署到服务器,只需要 PHP 环境,不需要数据库
详细看官方文档:https://github.com/cloudreve/Cloudreve/wiki/%E8%BF%9C%E7%A8%8B%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%90%AD%E5%BB%BA
需要注意:1、主机封了 80 和 443 端口,需要用其他端口访问。2、如果源站配置了 HTTPS 访问,则远程上传也必须配置 HTTPS
修改上传大小配置
在upload.php
文件第 69 行有检测上传文件大小,这里需要修改成和后台填写的一致,如果不一致并且超过了这里的限制会提示上传文件过大。
if($chunk && $this->fileSize > 4194350)
我改成了 300M
if($chunk && $this->fileSize > 314572800)
下面的分片文件大小也需要修改(可能是个 BUG,分片大小 4M,实际上传分片大小 10M,导致拼合的文件错误)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public function combineChunk($chunkList){ $fileName = "file_".md5(uniqid()); $fileObj=fopen ('chunks/'.$this->policy["uid"]."/".$fileName,"a+"); foreach ($chunkList as $key => $value) { $chunkObj = fopen('chunks/'.$this->policy["uid"]."/".$value, "rb"); if(!$fileObj || !$chunkObj){ self::setError("文件创建失败"); } $content = fread($chunkObj, 4195304); fwrite($fileObj, $content, 4195304); unset($content); fclose($chunkObj); unlink('chunks/'.$this->policy["uid"]."/".$value); } fclose($fileObj); $this->generateFile($fileName); }
|
改成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public function combineChunk($chunkList){ $fileName = "file_".md5(uniqid()); $fileObj=fopen ('chunks/'.$this->policy["uid"]."/".$fileName,"a+"); foreach ($chunkList as $key => $value) { $chunkObj = fopen('chunks/'.$this->policy["uid"]."/".$value, "rb"); if(!$fileObj || !$chunkObj){ self::setError("文件创建失败"); } $content = fread($chunkObj, 10485760); fwrite($fileObj, $content, 10485760); unset($content); fclose($chunkObj); unlink('chunks/'.$this->policy["uid"]."/".$value); } fclose($fileObj); $this->generateFile($fileName); }
|
- 配置 CORS 跨域访问
nginx 配置如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| location / { set $origin '*'; if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' $origin; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; }
if ($request_method = 'POST') { add_header 'Access-Control-Allow-Origin' $origin; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; }
if ($request_method = 'GET') { add_header 'Access-Control-Allow-Origin' $origin; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; } }
|
- 远程下载配置 X-Sendfile 减轻服务器压力
这里需要下载我修改好的 file.php 替换到远程服务端根目录下 点击这里下载
开启 Sendfile 功能后还可以配置 Web Server 权限禁止外部直接访问 uploads 目录
例如 nginx
1 2 3 4
| location ~ ^/(thumbs|uploads) { internal; }
|
增加微软 OneDrive 储存
以上两个上传策略毕竟是羊毛,不知道哪天就收费了,所以还可以增加其他储存一起使用
在编辑页面获取到应用 ID 和机密后,填入对应选项,然后保存的时候会要求登录获取权限
而且 Onedrive 是异步上传,需要先传到服务器,然后中转上传到 OneDrive,“这对虚拟主机一点也不友好,毕竟需要运行一个二进制客户端”
异步客户端配置直接看官方文档 https://github.com/cloudreve/Cloudreve/wiki/Onedrive%E5%AF%B9%E6%8E%A5%E8%AF%B4%E6%98%8E
增加七牛云、阿里云、又拍云
这些配置相对简单,省略……