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提取中文首字母
Apr 09 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
php的mssql数据库连接类实例
Nov 28 PHP
php利用cookies实现购物车的方法
Dec 10 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
May 13 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
YII框架批量插入数据的方法
Mar 18 PHP
Laravel学习教程之request validation的编写
Oct 25 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
如何理解PHP核心特性命名空间
May 28 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
PHP三层结构(上) 简单三层结构
2010/07/04 PHP
Smarty变量用法详解
2016/05/11 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
2013/01/24 Javascript
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
纯jquery实现模仿淘宝购物车结算
2015/08/20 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
javaScript实现滚动条事件详解
2020/03/24 Javascript
基于javascript中的typeof和类型判断(详解)
2017/10/27 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
详解webpack-dev-server使用方法
2018/09/14 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
python使用mitmproxy抓取浏览器请求的方法
2019/07/02 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
Python调用SMTP服务自动发送Email的实现步骤
2021/02/07 Python
html5跳转小程序wx-open-launch-weapp踩坑
2020/12/02 HTML / CSS
大学生关于奋斗的演讲稿
2014/01/09 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
详细的大学生创业计划书模板
2014/01/27 职场文书
食品采购员岗位职责
2014/04/14 职场文书
音乐课外活动总结
2015/05/09 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
《清澈的湖水》教学反思
2016/02/17 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang