首先放几个栗子:
CuoJue NetDisk
OneNET对象储存的文件分享
OneNET云主机远程储存的文件分享

下载的时候可通过提供方域名分辨储存区域
标题写的零成本只是云盘储存空间零成本,云盘系统还是需要自行搭建

搭建Cloudreve

搭建这个玩意,直接看官方文档吧 安装 - Cloudreve文档

需要PHP+MYSQL环境,需要注意的是,不支持PHP7.4(ThinkPHP框架不兼容),目前在PHP7.2下运行良好

增加上传策略

增加移动 OneNET 对象储存

本篇文章的核心部分第一节
截止目前 2020-1-2 本服务还是免费的(免费空间10GB+流量费全免)

  1. 注册地址:https://open.iot.10086.cn/cloud/console/object-storage/index
    注册后可免费领取对象储存和云服务器等资源,这里先开通对象储存

  2. 创建一个对象储存容器和AccessKey

  3. 在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/
  4. 配置完毕后修改用户组上传策略然后测试一下上传

增加移动 OneNET 云主机储存

本篇文章的核心部分第二节
截止目前 2020-1-2 本服务还是免费的(免费云主机最大4核8G/免费云盘最大容量2TB/免费文件储存无限容量)

  1. 服务器配置好环境

  2. 环境配置好后安装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

  3. 修改上传大小配置
    upload.php文件第69行有检测上传文件大小,这里需要修改成和后台填写的一致,如果不一致并且超过了这里的限制会提示上传文件过大。
    if($chunk && $this->fileSize > 4194350)
    我改成了300M
    if($chunk && $this->fileSize > 314572800)
    下面的分片文件大小也需要修改(可能是个BUG,分片大小4M,实际上传分片大小10M,导致拼合的文件错误)

     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);
     }

    改成

     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);
     }
  4. 配置CORS跨域访问
    nginx配置如下

    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';
       }
    }
  5. 远程下载配置X-Sendfile减轻服务器压力
    这里需要下载我修改好的file.php替换到远程服务端根目录下 点击这里下载
    开启Sendfile功能后还可以配置Web Server权限禁止外部直接访问uploads目录
    例如nginx

     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

增加七牛云、阿里云、又拍云

  这些配置相对简单,省略……

最后修改:2020 年 01 月 02 日 05 时 32 分