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 相关文章推荐
使用Xdebug调试和优化PHP程序之[1]
Apr 17 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
Jun 13 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
php恢复数组的key为数字序列的方法
Apr 28 PHP
php实现在服务器端调整图片大小的方法
Jun 16 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
php实现微信模拟登陆、获取用户列表及群发消息功能示例
Jun 28 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
php实现二叉树中和为某一值的路径方法
Oct 14 PHP
Laravel 修改验证异常的响应格式实例代码详解
May 25 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
PHP制作万年历
2015/01/07 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
javascript globalStorage类代码
2009/06/04 Javascript
Lazy Load 延迟加载图片的 jQuery 插件
2010/02/06 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
JS辨别访问浏览器判断是android还是ios系统
2014/08/19 Javascript
js倒计时抢购实例
2015/12/20 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
angularJS 如何读写缓冲的方法(推荐)
2016/08/06 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
Node.js websocket使用socket.io库实现实时聊天室
2017/02/20 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
编写更好的JavaScript条件式和匹配条件的技巧(小结)
2019/06/27 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
美国休闲服装品牌:Express
2016/09/24 全球购物
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
施华洛世奇波兰官网:SWAROVSKI波兰
2019/06/18 全球购物
电气技术员岗位职责
2013/11/19 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
幼儿园开学寄语
2014/04/03 职场文书
计算机专业自荐信范文
2014/05/28 职场文书
五心教育心得体会
2014/09/04 职场文书
作风整顿个人剖析材料
2014/10/06 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
课外活动实习计划
2015/01/19 职场文书
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
linux中nohup和后台运行进程查看及终止
2021/06/24 Python