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进行MySQL删除记录操作代码
Jun 07 PHP
PHP base64+gzinflate压缩编码和解码代码
Oct 03 PHP
php radio 单选框获取与保持值的实现代码
May 15 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
Jun 23 PHP
php的SimpleXML方法读写XML接口文件实例解析
Jun 16 PHP
php中unserialize返回false的解决方法
Sep 22 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
PHP实现函数内修改外部变量值的方法示例
Dec 28 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 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 class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
php读取纯真ip数据库使用示例
2014/01/26 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
图文介绍PHP添加Redis模块及连接
2015/07/28 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
laravel使用Faker数据填充的实现方法
2019/04/12 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
原生js事件的添加和删除的封装
2014/07/01 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
JS回调函数 callback的理解与使用案例分析
2019/09/09 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
vue实现前端分页完整代码
2020/06/17 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
Python xlwt设置excel单元格字体及格式
2020/04/18 Python
基于Python List的赋值方法
2018/06/23 Python
Python3 SSH远程连接服务器的方法示例
2018/12/29 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
Python多图片合并PDF的方法
2019/01/03 Python
python生成requirements.txt的两种方法
2019/09/18 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
地球上的星星观后感
2015/06/02 职场文书
培训心得体会怎么写
2016/01/25 职场文书
《灰雀》教学反思
2016/02/19 职场文书
如何利用pygame实现打飞机小游戏
2021/05/30 Python