本文实例讲述了ThinkPHP5+UEditor图片上传到阿里云对象存储OSS。分享给大家供大家参考,具体如下:
ThinkPHP5使用富文本UEditor,将富文本编辑框内上传在本地的图片,修改到阿里云对象存储OSS
ThinkPHP5加载UEditor ···· 略
UEditor下载:https://ueditor.baidu.com/website/download.html#ueditor
阿里云对象存储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配置文件
1
2
3
4
5
6
7
8
|
<?php
return [
'endpoint' => 'xxxx' ,
'accessKeyId' => 'xxxxxxxxxxx' ,
'accessKeySecret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxx' ,
'bucket' => 'xxxxx' ,
'uploadurl' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' , //个人配置用,上传图片访问头部完整链接
];
|
2、在UEditor下写入Oos.class.php控制器
*注:本人用的是相对路径,请自行对照自己的目录结构替换掉文件引入地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
<?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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?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程序设计有所帮助。
原文链接:https://blog.csdn.net/qq_28285379/article/details/87972847