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新手上路(十二)
Oct 09 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
Sep 04 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
Laravel框架生命周期与原理分析
Jun 12 PHP
PHP堆栈调试操作简单示例
Jun 15 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
php中的三元运算符使用说明
2011/07/03 PHP
PHP插入排序实现代码
2013/04/04 PHP
PHP中基本HTTP认证技巧分析
2015/03/16 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
页面使用密码保护代码
2013/04/10 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JS计算距当前时间的时间差实例
2017/12/29 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
用react-redux实现react组件之间数据共享的方法
2018/06/08 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
JS动画实现回调地狱promise的实例代码详解
2018/11/08 Javascript
使用vue脚手架(vue-cli)搭建一个项目详解
2019/05/09 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
JS实现多选框的操作
2020/06/24 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
Python如何读取文件中图片格式
2020/01/13 Python
python 使用OpenCV进行简单的人像分割与合成
2021/02/02 Python
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
Java servlet面试题
2012/03/04 面试题
家庭财产分割协议范文
2014/11/24 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
MySQL约束超详解
2021/09/04 MySQL
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL