文档章节

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程

开档库
 开档库
发布于 2017/09/08 18:21
字数 1182
阅读 10
收藏 0

 

1、SDK安装

github地址:https://github.com/aliyun/aliyun-oss-php-sdk

2、复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS,如图1、2

复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

复制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

3、注册新的命名空间OSS,编辑文件passport.hmwis.com\Application\Common\Conf\config.php,如图3

‘AUTOLOAD_NAMESPACE’ => array(‘Addons’ => ONETHINK_ADDON_PATH, ‘OSS’ => VENDOR_PATH.’OSS’), //扩展模块列表

注册新的命名空间OSS

注册新的命名空间OSS

4、实例化OSS下面的类库时,如

new OSS\OssClient();

自动加载对应的类库文件OssClient.class.php,因此需要重命名OSS目录下的文件名,将OssClient.php重命名为OssClient.class.php,OSS目录下所有文件皆如是处理,如图4

重命名OSS目录下的文件名,将OssClient.php重命名为OssClient.class.php,OSS目录下所有文件皆如是处理

重命名OSS目录下的文件名,将OssClient.php重命名为OssClient.class.php,OSS目录下所有文件皆如是处理

5、编辑passport.hmwis.com\Application\Common\Conf\config.php,生产环境下的OSS数据中心访问域名设置为内网,如图5

/* OSS初始化设置 */
‘OSS’ => array(
‘ACCESS_KEY_ID’ => ”, //从OSS获得的AccessKeyId
‘ACCESS_KEY_SECRET’ => ”, //从OSS获得的AccessKeySecret
‘ENDPOINT’ => ‘oss-cn-hangzhou-internal.aliyuncs.com’, //您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com
),

生产环境下的OSS数据中心访问域名设置为内网

生产环境下的OSS数据中心访问域名设置为内网

6、编辑passport.hmwis.com\Application\Common\Conf\debug.php,开发环境下的OSS数据中心访问域名设置为外网,如图6

/* OSS初始化设置 */
‘OSS’ => array(
‘ACCESS_KEY_ID’ => ”, //从OSS获得的AccessKeyId
‘ACCESS_KEY_SECRET’ => ”, //从OSS获得的AccessKeySecret
‘ENDPOINT’ => ‘oss-cn-hangzhou.aliyuncs.com’, //您选定的OSS数据中心访问域名,例如oss-cn-hangzhou.aliyuncs.com
),

开发环境下的OSS数据中心访问域名设置为外网

开发环境下的OSS数据中心访问域名设置为外网

7、实现上传本地文件至OSS的功能,如修改头像,如图7:

实现上传本地文件至OSS的功能,如修改头像

实现上传本地文件至OSS的功能,如修改头像

8、编辑passport.hmwis.com\Application\Home\Controller\ProfileController.class.php,导入OSS的客户端类、异常类,如图8
use OSS\OssClient;
use OSS\Core\OssException;

导入OSS的客户端类、异常类

导入OSS的客户端类、异常类

9、实例化OssClient类,调用上传本地文件方法,如图9

/**
* 根据Config配置,得到一个OssClient实例
*/
try {
$ossClient = new OssClient(C(‘OSS.ACCESS_KEY_ID’), C(‘OSS.ACCESS_KEY_SECRET’), C(‘OSS.ENDPOINT’), false);
} catch (OssException $e) {
$return[‘status’] = 0;
$return[‘info’] = $e->getMessage();
/* 返回JSON数据 */
$this->ajaxReturn($return);
}
$bucket = ‘avatar-ygt-cm’;
try {
$ossClient->uploadFile($bucket,$oss_file_path,$avatar);
} catch (OssException $e) {
$return[‘status’] = 0;
$return[‘info’] = $e->getMessage();
/* 返回JSON数据 */
$this->ajaxReturn($return);
}

实例化OssClient类,调用上传本地文件方法

实例化OssClient类,调用上传本地文件方法

10、基于ThinkPHP文件上传操作使用Think\Upload类定制,实现通过表单上传文件至OSS,复制passport.hmwis.com\ThinkPHP\Library\Think\Upload.class.php至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS\OssUpload.class.php,编辑passport.hmwis.com\ThinkPHP\Library\Vendor\OSS\OssUpload.class.php,如图10

namespace OSS;
use OSS\OssClient;
use OSS\Core\OssException;

基于ThinkPHP文件上传操作使用Think\Upload类定制,实现通过表单上传文件至OSS

基于ThinkPHP文件上传操作使用Think\Upload类定制,实现通过表单上传文件至OSS

11、编辑默认上传配置,如图11

/**
* 默认上传配置
* @var array
*/
private $config = array(
‘accessKeyId’ => ‘l0k4ZMxs44FAjAWH’, //AccessKeyId
‘accessKeySecret’ => ‘hjU4DPhzKl6pwT6K0HlTkVMNaE9rZo’, //AccessKeySecret
‘endpoint’ => ‘oss-cn-hangzhou.aliyuncs.com’, //区域地址
‘mimes’ => array(), //允许上传的文件MiMe类型
‘maxSize’ => 0, //上传的文件大小限制 (0-不做限制)
‘exts’ => array(), //允许上传的文件后缀
‘autoSub’ => true, //自动子目录保存文件
‘subName’ => array(‘date’, ‘Y-m-d’), //子目录创建方式,[0]-函数名,[1]-参数,多个参数使用数组
‘rootPath’ => ‘./Uploads/’, //保存根路径
‘savePath’ => ”, //保存路径
‘saveName’ => array(‘uniqid’, ”), //上传文件命名规则,[0]-函数名,[1]-参数,多个参数使用数组
‘saveExt’ => ”, //文件保存后缀,空则使用原后缀
‘replace’ => false, //存在同名是否覆盖
‘hash’ => true, //是否生成hash编码
‘callback’ => false, //检测文件是否存在回调,如果存在返回文件信息数组
);

注:主要为取消文件上传驱动及文件目录相关的操作功能实现,由于改动过多,建议查看SVN日志,或者直接复制OssUpload.class.php;

主要为取消文件上传驱动及文件目录相关的操作功能实现,由于改动过多,建议查看SVN日志,或者直接复制OssUpload.class.php

主要为取消文件上传驱动及文件目录相关的操作功能实现,由于改动过多,建议查看SVN日志,或者直接复制OssUpload.class.php

12、编辑上传文件方法upload,如图12

/* 保存文件 并记录保存成功的文件 */
/*
if ($this->uploader->save($file,$this->replace)) {
unset($file[‘error’], $file[‘tmp_name’]);
$info[$key] = $file;
} else {
$this->error = $this->uploader->getError();
}*/
/**
* 根据Config配置,得到一个OssClient实例
*/
try {
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint, false);
} catch (OssException $e) {
$this->error = $e->getMessage();
}

/**
* 上传本地文件
*/
$bucket = ‘avatar-ygt-cm’;
$object = $this->rootPath . $file[‘savepath’] . $file[‘savename’];
try {
$ossClient->uploadFile($bucket,$object,$file[‘tmp_name’]);
unset($file[‘error’], $file[‘tmp_name’]);
$file[‘oss’] = $bucket . ‘/’ . $object;
$info[$key] = $file;
} catch (OssException $e) {
$this->error = $e->getMessage();
}

编辑上传文件方法upload

编辑上传文件方法upload

13、实现通过表单上传文件至OSS,编辑passport.hmwis.com\Application\Home\Controller\ProfileController.class.php,导入OSS的文件上传类
use OSS\OssUpload;
所有上传实现建议参考Think\Upload类的文档,基本上一致

 

注意:上传地址不能带 ‘./’不然会报签名错误

本文转载自:http://www.shuijingwanwq.com/2016/01/13/909/

共有 人打赏支持
开档库
粉丝 0
博文 10
码字总数 3986
作品 0
泰安
程序员
subversion的安装与多项目权限配置笔记

1:安装过程,这里采用了yum的方式安装,编译的话有点麻烦。 [root@localhost data]# yum install subversion 执行以下的命令: svn --version 如果显示 svn, version 1.6.11 (r934486) 之类...

风一样的世界
2014/05/23
0
0
onethink不能安装到已经存在的数据库中的问题

onethink官方版本 onethink1.0140202.zip 放到环境中,进行安装,到第二步时,怎么也通不过 因为我是安装到一个已经存在的库中,才有此问题 而该版本的InstallController的第81行的对已存在库...

qingfeng哥
2014/04/26
0
1
通过SocketLog快速分析OneThink程序

通过SocketLog快速分析OneThink程序 http://www.thinkphp.cn/topic/10846.html 浏览:2332 发布日期:2014/02/08 分类:技术分享 正在运行的API有bug,不能var_dump进行调试,因为会影响cli...

thinkyoung
2015/08/13
0
0
异步调试神器Slog,“从此告别看日志,清日志文件了”

微信调试、API调试和AJAX的调试的工具,能将日志通过WebSocket输出到Chrome浏览器的console中 — Edit PHPJavaScriptHTML Branch: master SocketLog/ Pull request CompareThis branch is ev...

thinkyoung
2015/08/12
0
0
onethink在mysql下不能新建编辑器类型字段

onethink在mysql下不能新建编辑器类型字段 clone最新的代码安装完毕,继承基础文档,新增detaildesc字段为编辑器类型,没有新建表。且sql语句有误 主要原因是 MYSQL5.x是不允许BLOB/TEXT类型...

qingfeng哥
2014/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Ubuntu18.04 显卡GF-940MX安装NVIDIA-390.77

解决办法: 下面就给大家一个正确的姿势在Ubuntu上安装Nvidia驱动: (a)首先去N卡官网下载自己显卡对应的驱动:www.geforce.cn/drivers (b)下载后好放在英文路径的目录下,怎么简单怎么来...

AI_SKI
今天
0
0
深夜胡思乱想

魔兽世界 最近魔兽世界出了新版本, 周末两天升到了满级,比之前的版本体验好很多,做任务不用抢怪了,不用组队打怪也是共享拾取的。技能简化了很多,哪个亮按哪个。 运维 服务器 产品 之间的...

Firxiao
今天
0
0
MySQL 8 在 Windows 下安装及使用

MySQL 8 带来了全新的体验,比如支持 NoSQL、JSON 等,拥有比 MySQL 5.7 两倍以上的性能提升。本文讲解如何在 Windows 下安装 MySQL 8,以及基本的 MySQL 用法。 下载 下载地址 https://dev....

waylau
今天
0
0
微信第三方平台 access_token is invalid or not latest

微信第三方开发平台code换session_key说的特别容易,但是我一使用就带来无穷无尽的烦恼,搞了一整天也无济于事. 现在记录一下解决问题的过程,方便后来人参考. 我遇到的这个问题搜索了整个网络也...

自由的开源
今天
2
0
openJDK之sun.misc.Unsafe类CAS底层实现

注:这篇文章参考了https://www.cnblogs.com/snowater/p/8303698.html 1.sun.misc.Unsafe中CAS方法 在sun.misc.Unsafe中CAS方法如下: compareAndSwapObject(java.lang.Object arg0, long a......

汉斯-冯-拉特
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部