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 17 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
php页面防重复提交方法总结
Nov 25 PHP
php制作中间带自己定义图片二维码的方法
Jan 27 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
Nov 21 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP与Web页面的交互示例详解一
Aug 04 PHP
基于PHP实现发微博动态代码实例
Dec 11 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
PR值查询 | PageRank 查询
2006/12/20 PHP
使用php统计字符串中中英文字符的个数
2013/06/23 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
JS中mouseup事件丢失的原因与解决办法
2017/06/14 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
python模拟Django框架实例
2016/05/17 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
python+opencv实现霍夫变换检测直线
2020/10/23 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
关于tensorflow的几种参数初始化方法小结
2020/01/04 Python
基于pycharm实现批量修改变量名
2020/06/02 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
ktv中秋节活动方案
2014/01/30 职场文书
高二政治教学反思
2014/02/01 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
永远跟党走演讲稿
2014/09/12 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
公司地址变更通知
2015/04/25 职场文书
爱心捐书倡议书
2015/04/27 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
房屋产权证明书
2015/06/19 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
MongoDB数据库的安装步骤
2021/06/18 MongoDB
如何vue使用el-table遍历循环表头和表体数据
2022/04/26 Vue.js