实现方法:

本插件通过oss服务端上传实现,图片类小文件没啥问题,上传视频附件等大文件会很慢!

效果展示:

PbootCMS对接阿里云OSS云存储

PbootCMS对接阿里云OSS云存储

PbootCMS对接阿里云OSS云存储

二开步骤

修改后台模板

文件位置:/apps/admin/view/default/system/config.html

<div class="layui-tab-item">
  <form action="{url./admin/Config/index}" method="post" class="layui-form">
    <input type="hidden" name="formcheck" value="{$formcheck}" >
    <div class="layui-form-item">
      <label class="layui-form-label">阿里OSS</label>
      <div class="layui-input-block">
        <input type="radio" name="oss_open" value="1" {if([$configs.oss_open.value]==1)} checked="checked" {/if} title="启用">
        <input type="radio" name="oss_open" value="0" {if([$configs.oss_open.value]==0)} checked="checked" {/if} title="禁用">
      </div>
    </div>
    <div class="layui-form-item">
      <label class="layui-form-label">阿里AK</label>
      <div class="layui-input-inline">
        <input type="text" name="oss_accak" value="{$configs.oss_accak.value}" placeholder="请输入OSS AK码" class="layui-input">
      </div>
    </div>
    <div class="layui-form-item">
      <label class="layui-form-label">阿里SK</label>
      <div class="layui-input-inline">
        <input type="text" name="oss_accsk" value="{$configs.oss_accsk.value}" placeholder="请输入OSS密钥"  class="layui-input">
      </div>
    </div>
    <div class="layui-form-item">
      <label class="layui-form-label">bucket</label>
      <div class="layui-input-inline">
        <input type="text" name="oss_bucket" value="{$configs.oss_bucket.value}" placeholder="请输入bucket库名"  class="layui-input">
      </div>
    </div>
    <div class="layui-form-item">
      <label class="layui-form-label">上传地址</label>
      <div class="layui-input-inline" style="width:300px;">
        <input type="text" name="oss_network" value="{$configs.oss_network.value}" placeholder="请输入OSS外网上传"  class="layui-input">
      </div>
    </div>
    <div class="layui-form-item">
      <label class="layui-form-label">访问链接</label>
      <div class="layui-input-inline" style="width:300px;">
        <input type="text" name="oss_url" value="{$configs.oss_url.value}" placeholder="请输入OSS访问前缀链接"  class="layui-input">
      </div>
    </div>
    <div class="layui-form-item">
      <label class="layui-form-label">附件名称</label>
      <div class="layui-input-block">
        <input type="radio" name="original_name" value="1" {if([$configs.original_name.value]==1)} checked="checked" {/if} title="保持原名">
        <input type="radio" name="original_name" value="0" {if([$configs.original_name.value]==0)} checked="checked" {/if} title="随机名称">
      </div>
    </div>
    <div class="layui-form-item">
      <div class="layui-input-block">
        <button class="layui-btn" lay-submit name="submit" value="t9">立即提交</button>
        <button type="reset" class="layui-btn layui-btn-primary">重置</button>
      </div>
    </div>
  </form>
</div>

细节问题自行调整

上传OSS SDK包

把下载的SDK上传到/core/extend

添加OSS上传代码

文件位置:/core/function/handle.php

最上面引入一下SDK
use OSSOssClient;
use OSSCoreOssException;
.
.
.
//oss文件上传
function upload_oss($file_url)
{
    if (is_https()) {
        $network = 'https://' . Config::get('oss_network');
    } else {
        $network = 'http://' . Config::get('oss_network');
    }
    $accessKeyId = Config::get('oss_accak');
    $accessKeySecret = Config::get('oss_accsk');
    $bucket = Config::get('oss_bucket'); //oss库名
    $url = 'https://' .Config::get('oss_url'); //oss访问地址
    $content = str_replace("static/", "", strstr($file_url, "static/")); //处理目录(要上传的oss目录)
    try {
        $ossurl = $url . "/" . $content;
        $ossClient = new OssClient($accessKeyId, $accessKeySecret, $network);
        $data = $ossClient->uploadFile($bucket, $content, $file_url);
    } catch (Exception $e) {
        $save_file = str_replace(ROOT_PATH, '', $file_url);
        $ossurl = $save_file; // 上传文件失败 返回默认的地址
    }
    // 成功的时候删除本地文件
    if ($data['info']['http_code'] == 200) {
        path_delete($file_url);
    }
    return $ossurl;
}

载入SDK

文件位置:/core/init.php

搜索关键词:载入基础函数库

如图把这两句话丢进去

require CORE_PATH . '/extend/alioss/autoload.php';

spl_autoload_register('classLoader', true, true);

PbootCMS对接阿里云OSS云存储

修改上传函数

文件位置:/core/function/file.php

搜索函数:handle_upload 我整个函数都贴出来自己对比下

顶部引入
use coreasicConfig;

// 处理并移动上传文件
function handle_upload($file, $temp, $array_ext_allow, $max_width, $max_height, $watermark)
{
    // 定义主存储路径
    $save_path = DOC_PATH . STATIC_DIR;
    $file = explode('.', $file); // 分离文件名及扩展
    $file_ext = strtolower(end($file)); // 获取扩展
    $file_name = $file[0]; //文件名称
    if (! in_array($file_ext, $array_ext_allow))
    {
        return $file_ext . '格式的文件不允许上传!';
    }
    
    $image = array(
        'png',
        'jpg',
        'gif',
        'bmp',
        'webp'
    );
    $file = array(
        'ppt',
        'pptx',
        'xls',
        'xlsx',
        'doc',
        'docx',
        'pdf',
        'txt'
    );
    if (in_array($file_ext, $image))
    {
        $file_type = 'image';
        if(Config::get('is_webp')==1){
            // 如果是图片强制把后缀修改为webp
            $file_ext = "webp";
        }
    } elseif (in_array($file_ext, $file)) {
        $file_type = 'file';
    } else {
        $file_type = 'other';
    }
    
    // 检查文件存储路径
    if (! check_dir($save_path . '/' . $file_type . '/' . date('Ym'), true)) {
        return '存储目录创建失败!';
    }
    // 文件名称处理
    if(Config::get('original_name')==0 || $file_type=='image')
    {
        // 随机名称
        $file_name = time() . mt_rand(100000, 999999);
    }
    $file_path = $save_path . '/' . $file_type . '/' . date('Ym') . '/' . $file_name . '.' . $file_ext;
    if (! move_uploaded_file($temp, $file_path)) { // 从缓存中转存
        return '从缓存中转存失败!';
    }
    $save_file = str_replace(ROOT_PATH, '', $file_path); // 获取文件站点路径
                                                         
    // 如果是图片
    if (is_image($file_path))
    {
        // 进行等比例缩放
        if (($reset = resize_img($file_path,$file_path,$max_width,$max_height)) !== true)
        {
            return $reset;
        }
        // 图片打水印
        if ($watermark) {
            watermark_img($file_path);
        }
    }

    // 转存OSS
    if(Config::get('oss_open')==1)
    {
        $save_file = upload_oss($file_path);
    }
    return $save_file;
}

继续修改编辑器上传函数

文件地址:/core/extend/ueditor/php/action_upload.php

搜索关键词:$upload = $up->getFileInfo();

如图代码丢进去

// 验证是否上传OSS
if(Config::get('oss_open') == 1)
{
    $upload['url'] = upload_oss($_SERVER['DOCUMENT_ROOT'].$rs['url']);
}

PbootCMS对接阿里云OSS云存储

至此结束!