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 20 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
Oct 29 PHP
php抽奖小程序的实现代码
Jun 18 PHP
PHP以指定字段为索引返回数据库所取的数据数组
Jun 30 PHP
Apache实现Web Server负载均衡详解(不考虑Session版)
Jul 05 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
php微信公众号开发之现金红包
Apr 16 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
Mar 09 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 图像处理类1
2009/06/15 PHP
PHP编程风格规范分享
2014/01/15 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP中的表达式简述
2016/05/29 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
JScript内置对象Array中元素的删除方法
2007/03/08 Javascript
js如何取消事件冒泡
2013/09/23 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
python3图片转换二进制存入mysql
2013/12/06 Python
python基础教程之数字处理(math)模块详解
2014/03/25 Python
Python中的自定义函数学习笔记
2014/09/23 Python
Python中的数学运算操作符使用进阶
2016/06/20 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python3网络爬虫中的requests高级用法详解
2019/06/18 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
市场部专员岗位职责
2013/11/30 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
会计主管岗位职责
2014/01/03 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
仓库管理计划书
2014/05/04 职场文书
外联部演讲稿
2014/05/24 职场文书
学雷锋的心得体会
2014/09/04 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js