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正则校验用户名介绍
Jul 19 PHP
使用PHP socke 向指定页面提交数据
Jul 23 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
php HTML无刷新提交表单
Apr 05 PHP
Yii实现显示静态页的方法
Apr 25 PHP
PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】
Aug 11 PHP
yii框架redis结合php实现秒杀效果(实例代码)
Oct 26 PHP
PHP获取当前系统时间的方法小结
Oct 03 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
PHP时间函数使用详解
Mar 21 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 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
php基础知识:类与对象(1)
2006/12/13 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php笔记之:php函数range() round()和list()的使用说明
2013/04/26 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
javascript 单选框,多选框美化代码
2008/08/01 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
js限制input标签中只能输入中文
2015/06/26 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
js获取元素的标签名实现方法
2016/10/08 Javascript
浅谈jquery的html方法里包含特殊字符的处理
2016/11/30 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
Canvas放置反弹效果随机图形(实例)
2017/08/17 Javascript
原生JS获取元素的位置与尺寸实现方法
2017/10/18 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
JavaScript实现左侧菜单效果
2017/12/14 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
python中map()函数的使用方法示例
2017/09/29 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
伦敦香水公司:The London Perfume Company
2019/11/13 全球购物
英国钻石公司:British Diamond Company
2020/02/16 全球购物
人力资源总监工作说明
2014/03/03 职场文书
党员反对四风问题思想汇报
2014/09/12 职场文书
雷锋之歌观后感
2015/06/10 职场文书
2015年暑假生活总结
2015/07/13 职场文书
如何使用分区处理MySQL的亿级数据优化
2021/06/18 MySQL