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中通过curl模拟登陆discuz论坛的实现代码
Feb 16 PHP
ajax取消挂起请求的处理方法
Mar 18 PHP
使用php测试硬盘写入速度示例
Jan 27 PHP
PHPThumb图片处理实例
May 03 PHP
PHP多进程编程实例
Oct 15 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
详解Yii2.0使用AR联表查询实例
Jun 16 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
PHP实现微信提现功能(微信商城)
Nov 21 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模拟服务器实现autoindex效果的方法
2015/03/10 PHP
php计算指定目录下文件占用空间的方法
2015/03/13 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
基于Vue如何封装分页组件
2016/12/16 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
Javascript创建类和对象详解
2017/05/31 Javascript
vue中echarts3.0自适应的方法
2018/02/26 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
[05:17]DOTA2誓师:今天我们在这里 明天TI4等我!
2014/03/26 DOTA
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python比较2个xml内容的方法
2015/05/11 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
python批量获取html内body内容的实例
2019/01/02 Python
python通过txt文件批量安装依赖包的实现步骤
2019/08/13 Python
python redis存入字典序列化存储教程
2020/07/16 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
文明班级建设方案
2014/05/15 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
捐助倡议书
2015/01/19 职场文书
胡雪岩故居导游词
2015/02/06 职场文书
在职证明书模板
2015/06/15 职场文书
2015年库房管理工作总结
2015/10/14 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python