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 截取字符串函数整理(支持gb2312和utf-8)
Feb 16 PHP
php 常用算法和时间复杂度
Jul 01 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
PHPStorm+XDebug进行调试图文教程
Jun 13 PHP
Ajax实现对静态页面的文章访问统计功能示例
Oct 10 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 PHP
PHP Laravel 上传图片、文件等类封装
Aug 16 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
php实现微信原生支付(扫码支付)功能
May 30 PHP
PHP时间处理类操作示例
Sep 05 PHP
Laravel5.5 动态切换多语言的操作方式
Oct 25 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
解析link_mysql的php版
2013/06/30 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
jQuery实现按钮只点击一次后就取消点击事件绑定的方法
2015/06/26 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
js实现二级菜单渐隐显示
2015/11/03 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
原生js实现密码输入框值的显示隐藏
2017/07/17 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
基于vue打包后字体和图片资源失效问题的解决方法
2018/03/06 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
python中print的不换行即时输出的快速解决方法
2016/07/20 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
python使用udp实现聊天器功能
2018/12/10 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
Python实现不规则图形填充的思路
2020/02/02 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
你可能不熟练的十个前端HTML5经典面试题
2018/07/03 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
生产部岗位职责范文
2014/02/07 职场文书
互联网电子商务专业毕业生求职信
2014/03/18 职场文书
企业百日安全活动总结
2015/05/07 职场文书
MySQL令人咋舌的隐式转换
2021/04/05 MySQL
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
python之基数排序的实现
2021/07/26 Python
php将xml转化对象的实例详解
2021/11/17 PHP
Java完整实现记事本代码
2022/06/16 Java/Android