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 03 PHP
解析PayPal支付接口的PHP开发方式
Nov 28 PHP
php 函数中使用static的说明
Jun 01 PHP
php中使用sftp教程
Mar 30 PHP
双冒号 ::在PHP中的使用情况
Nov 05 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
ecshop添加菜单及权限分配问题
Nov 21 PHP
YII框架http缓存操作示例
Apr 29 PHP
php写入文件不覆盖的实例讲解
Sep 17 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 全文搜索和替换的实现代码
2008/07/29 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
如何使用php实现评委评分器
2015/07/31 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
javascript 跳转代码集合
2009/12/03 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
js实现右键菜单功能
2016/11/28 Javascript
JS实现颜色梯度与渐变效果完整实例
2016/12/30 Javascript
jQuery EasyUI Draggable拖动组件
2017/03/01 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
在Python的Django框架上部署ORM库的教程
2015/04/20 Python
Python中datetime模块参考手册
2017/01/13 Python
python requests 测试代理ip是否生效
2018/07/25 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
python实现在线翻译功能
2020/03/03 Python
办理信用卡工作证明
2014/01/11 职场文书
施工安全责任书
2014/04/14 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
街道务虚会发言材料
2014/10/20 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
社区节水倡议书
2015/04/29 职场文书
装修公司管理制度
2015/08/05 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python