PbootCMS对接阿里云OSS云存储
实现方法:
本插件通过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);
修改上传函数
文件位置:/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']); }
至此结束!
本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。