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 memcache扩展的三种安装方法
Apr 26 PHP
不要轻信 PHP_SELF的安全问题
Sep 05 PHP
简单PHP上传图片、删除图片实现代码
May 12 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
PHP中“简单工厂模式”实例代码讲解
Sep 04 PHP
zend framework配置操作数据库实例分析
Dec 06 PHP
使用cookie实现统计访问者登陆次数
Jun 08 PHP
PHP自定session保存路径及删除、注销与写入的方法
Nov 18 PHP
javascript数组与php数组的地址传递及值传递用法实例
Jan 22 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 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
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
php跨服务器访问方法小结
2015/05/12 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
jquery实现图片翻页效果
2013/12/23 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
详细介绍Python的鸭子类型
2016/09/12 Python
Python实现简易版的Web服务器(推荐)
2018/01/29 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
使用pycharm在本地开发并实时同步到服务器
2019/08/02 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python语言异常处理测试过程解析
2020/01/08 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
阿玛尼意大利官网:Armani意大利
2018/10/30 全球购物
测试工程师岗位职责
2013/11/28 职场文书
七年级生物教学反思
2014/01/30 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
自我鉴定书
2014/03/24 职场文书
党员公开承诺书范文
2014/03/25 职场文书
2015年化验员工作总结
2015/04/10 职场文书
爱国主题班会教案
2015/08/14 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
2021/05/05 Golang
Nginx实现负载均衡的项目实践
2022/03/18 Servers
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技