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 相关文章推荐
eWebEditor v3.8 商业完整版 (PHP)
Dec 06 PHP
PHP 5.0对象模型深度探索之对象复制
Mar 27 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
openPNE常用方法分享
Nov 29 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
深入理解php的MySQL连接类
Jun 07 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
PHPMailer发送邮件
Dec 28 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
PHP实现本地图片转base64格式并上传
May 29 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
深入Nginx + PHP 缓存详解
2013/07/11 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
jQuery操作元素css样式的三种方法
2014/06/04 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
2015/07/03 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
用ES6写全屏滚动插件的示例代码
2018/05/02 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python批量按比例缩小图片脚本分享
2015/05/21 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
2020/01/18 Python
Python3爬虫发送请求的知识点实例
2020/07/30 Python
python爬虫利用代理池更换IP的方法步骤
2021/02/21 Python
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
PHP面试题集
2016/12/18 面试题
2013年最新自荐信范文
2014/06/23 职场文书
教师师德师风整改措施
2014/10/24 职场文书
士兵突击观后感
2015/06/16 职场文书
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
CentOS安装Nginx并部署vue
2022/04/12 Servers