文档章节

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

开档库
 开档库
发布于 2017/09/08 18:21
字数 1182
阅读 11
收藏 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
泰安
程序员
私信 提问
OneThink 1.0 正式版发布,内容管理框架

OneThink1.0正式版发布 OneThink是一个开源的内容管理框架,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制,融合了模块化、驱动...

流年
2013/12/19
5K
15
OneThink V1.0.130929开发版发布

OneThink V1.0.130929开发版发布------V1.0.130929开发版本是在9月19日发布的1.0beta版本的基础上,改进用户体验、增加了一些功能。 注意事项: 1、OneThink安装要求PHP5.3+版本; 2、目前开...

麦当苗儿
2013/09/30
764
1
OneThink内容管理框架即将发布

继ThinkPHP的SAE引擎、云引擎和TPM(ThinkPHPMobile)之后,上海顶想信息科技将于中秋发布一款内容管理框架OneThink,正式向应用开发迈出新的一步。 作为国内领先的WEB应用开发框架提供商,顶...

Topthink
2013/08/26
5.3K
4
Q:使用JAVA建造一个开源CMS系统,如何实现类似PHP开源项目中cms的online install功能?

Q:使用JAVA建造一个开源CMS系统,如何实现类似PHP开源项目中cms的online install功能? 各位亲们请给个思路,最近想做个基于jfinal的cms系统,模仿onethink框架, 目前各功能开发没什么问题...

阿伏流
2016/08/18
510
4
subversion的安装与多项目权限配置笔记

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

风一样的世界
2014/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

缓存

并发情况下发生的缓存问题: 缓存一致性: 缓存穿透:是指在高并发场景下,如果某一个key被高并发的访问,缓存没有命中,出于容错性的考虑,会去数据库获取数据,从而导致大量请求访问数据库...

wuyiyi
4分钟前
0
0
eclipse 和idea 快捷键对照

分类 功能点 Eclipse快捷键 IDEA快捷键 搜索 搜索文本 Ctrl + F Ctrl + F Ctrl + R 查找替换 Alt + P/A 逐个/全部替换 Alt + F3 查找当前选中词 继续搜索 Ctrl + K 向前 Ctrl + Shift + K 向...

郭恩洲_OSC博客
5分钟前
0
0
PowerHA IP 替换方式与IP 别名方式的区别

IPAT via replacement (IP替换) The service IP label replaces the boot IP address on the interface. The heartbeat IP alias address remains. IPAT via aliasing (IP别名) The servic......

突突突酱
9分钟前
1
0
Kafka 几个重要的配置总结

注意:配置基于Kafka 0.8.2.1 broker配置 #非负整数,用于唯一标识broker broker.id 0 #kafka持久化数据存储的路径,可以指定多个,以逗号分隔 log.dirs /tmp/kafka-logs #broker接收连接请求...

hblt-j
9分钟前
0
0
开发函数计算的正确姿势 —— 排查超时问题

写不尽的 code,查不完的 bug 通常我们写 bug,哦,不对,写代码时总不会一帆风顺,往往各种 bug 充斥其中,即使测试有较高的代码覆盖率往往也会有漏网之鱼。能写出一些比较隐蔽或者看起来像...

阿里云官方博客
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部