零成本搭建自有公私兼备云盘(Cloudreve)
首先放几个栗子:
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/免费文件储存无限容量)
服务器配置好环境
- 可选择宝塔面板一键安装
- 可选择LNMP一键安装包
- 可选择OneinStack一键安装工具
环境配置好后安装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)
我改成了300Mif($chunk && $this->fileSize > 314572800)
下面的分片文件大小也需要修改(可能是个BUG,分片大小4M,实际上传分片大小10M,导致拼合的文件错误)1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17public 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
17public 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
23location / {
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目录
例如nginx1
2
3
4location ~ ^/(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
增加七牛云、阿里云、又拍云
这些配置相对简单,省略……
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!