ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例


Posted in PHP onAugust 05, 2019

本文实例讲述了ThinkPHP5+UEditor图片上传到阿里云对象存储OSS。分享给大家供大家参考,具体如下:

ThinkPHP5使用富文本UEditor,将富文本编辑框内上传在本地的图片,修改到阿里云对象存储OSS

ThinkPHP5加载UEditor ···· 略

UEditor下载:https://ueditor.baidu.com/website/download.html#ueditor

(或本站下载:https://3water.com/codes/56667.html)

阿里云对象存储SDK下载:https://github.com/aliyun/aliyun-oss-php-sdk

一、配置项

ueditor目录:\public\static\admin\lib\ueditor\1.4.3
OSS配置文件目录:\application\config\oos.php
OSS SDK目录:\extend\oos

二、代码

1、OSS配置文件

<?php
return [
  'endpoint' => 'xxxx',
  'accessKeyId' => 'xxxxxxxxxxx',
  'accessKeySecret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
  'bucket' => 'xxxxx',
  'uploadurl' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //个人配置用,上传图片访问头部完整链接
];

2、在UEditor下写入Oos.class.php控制器

*注:本人用的是相对路径,请自行对照自己的目录结构替换掉文件引入地址

<?php
require_once realpath(dirname(__FILE__) . '/../../../../../../../') . '/extend/oos/autoload.php';
use OSS\OssClient;
use OSS\Core\OssException;
class Oos
{
  protected $oos = null;
  protected $bucket = null;
  //获取OOS客户端
  protected function getOssClient(){
    if($this->oos === null){
      $config = require realpath(dirname(__FILE__) . '/../../../../../../../') .'/application/config/oos.php';
      $this->bucket = $config['bucket'];
      try {
        $this->oos = new OssClient($config['accessKeyId'], $config['accessKeySecret'], $config['endpoint'], false);
      } catch (OssException $e) {
        printf(__FUNCTION__ . "creating OssClient instance: FAILED\n");
        printf($e->getMessage() . "\n");
        return null;
      }
    }
    return $this->oos;
  }
  //上传
  public function upload($file,$save){
    $config = require realpath(dirname(__FILE__) . '/../../../../../../../') .'/application/config/oos.php';
    $save = 'upload/'.$save;
    $ossClient = $this->getOssClient();
    if (is_null($ossClient)) exit('链接存储失败');
    $result = $ossClient->uploadFile($this->bucket, $save, $file);
    return !empty($result['x-oss-request-id']);
  }
}

3、修改UEditor 上传图片的PHP文件\public\static\admin\lib\ueditor\1.4.3\php\action_crawler.php

<?php
/**
 * 抓取远程图片
 * User: Jinqn
 * Date: 14-04-14
 * Time: 下午19:18
 */
set_time_limit(0);
include("Uploader.class.php");
include("Oos.class.php");
// 引入oss对象
$oos_config = require realpath(dirname(__FILE__) . '/../../../../../../../') .'/application/config/oos.php';
$oos = new Oos();
/* 上传配置 */
$config = array(
  "pathFormat" => $CONFIG['catcherPathFormat'],
  "maxSize" => $CONFIG['catcherMaxSize'],
  "allowFiles" => $CONFIG['catcherAllowFiles'],
  "oriName" => "remote.png"
);
$fieldName = $CONFIG['catcherFieldName'];
/* 抓取远程图片 */
$list = array();
if (isset($_POST[$fieldName])) {
  $source = $_POST[$fieldName];
} else {
  $source = $_GET[$fieldName];
}
foreach ($source as $imgUrl) {
  $item = new Uploader($imgUrl, $config, "remote");
  $info = $item->getFileInfo();
  $year = date('Ymd',time());//图片路径 (年/月) 自己设置
  $img_name = time().rand(1,1000).$info['type'];
  $bos_url = "ueditor_upload/xinjieshi/image/$year/$img_name";//用作保存的图片路径和名字
  $oos->upload($_SERVER['DOCUMENT_ROOT'].'/'.$info['url'],$bos_url);
  array_push($list, array(
    "state" => $info["state"],
    "url" => $oos_config['uploadurl'].$bos_url,
    "size" => $info["size"],
    "title" => htmlspecialchars($info["title"]),
    "original" => htmlspecialchars($info["original"]),
    "source" => htmlspecialchars($imgUrl)
  ));
}
/* 返回抓取数据 */
return json_encode(array(
  'state'=> count($list) ? 'SUCCESS':'ERROR',
  'list'=> $list
));

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
并发下常见的加锁及锁的PHP具体实现代码
Oct 12 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
destoon之一键登录设置
Jun 21 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
PHP加MySQL消息队列深入理解
Feb 27 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 #PHP
php时间戳转换代码详解
Aug 04 #PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 #PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 #PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
Aug 03 #PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 #PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 #PHP
You might like
用 Composer构建自己的 PHP 框架之设计 MVC
2014/10/30 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
js function定义函数使用心得
2010/04/15 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
javaScript array(数组)使用字符串作为数组下标的方法
2013/11/19 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
初识Javascript小结
2015/07/16 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
Validform验证时可以为空否则按照指定格式验证
2017/10/20 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
微信小程序之批量上传并压缩图片的实例代码
2018/07/05 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
微信小程序如何调用新闻接口实现列表循环
2019/07/02 Javascript
layui table 列宽百分比显示的实现方法
2019/09/28 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
python scp 批量同步文件的实现方法
2019/01/03 Python
python实现贪吃蛇游戏
2020/03/21 Python
英国人最爱的饰品网站:Accessorize
2016/08/22 全球购物
全球最大的服务市场:Fiverr
2017/01/03 全球购物
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
保安员岗位职责
2013/11/17 职场文书
中国梦的演讲稿
2014/01/08 职场文书
洗车工岗位职责
2014/03/15 职场文书
幼儿园植树节活动总结
2014/07/04 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
社团个人总结范文
2015/03/05 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers