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

by shuijingwan · 2016/01/13

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

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

‘AUTOLOAD_NAMESPACE’ => array(‘Addons’ => ONETHINK_ADDON_PATH, ‘OSS’ => VENDOR_PATH.’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目录下所有文件皆如是处理

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数据中心访问域名设置为内网

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数据中心访问域名设置为外网

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

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

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

use OSS\OssClient;

use OSS\Core\OssException;

导入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类,调用上传本地文件方法

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

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

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

13、实现通过表单上传文件至OSS,编辑passport.hmwis.com\Application\Home\Controller\ProfileController.class.php,导入OSS的文件上传类

use OSS\OssUpload;

所有上传实现建议参考Think\Upload类的文档,基本上一致

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程

by shuijingwan · 2016/02/25

1、在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调,前提是先参照:http://www.shuijingwanwq.com/2016/01/13/909/ 实现,设置Bucekt(storage4-hmwis-com)的CORS,如图0;

设置Bucekt(storage4-hmwis-com)的CORS

2、查看帮助文档Web端直传实践——服务端签名直传并设置上传回调,下载代码示例,应用服务器返回签名代码:oss-h5-upload-js-php-callback.tar.gz、回调应用服务器版本:callback-php-demo.zip,如图1、2

应用服务器返回签名代码:oss-h5-upload-js-php-callback.tar.gz

回调应用服务器版本:callback-php-demo.zip

3、复制:E:\wwwroot\oss-h5-upload-js-php-callback\php\get.php中的function gmt_iso8601至E:\wwwroot\ke.hmwis.com\Application\Common\Common\function.php,如图3

复制function gmt_iso8601

4、打开:E:\wwwroot\ke.hmwis.com\Application\Home\Controller\FileController.class.php,新建上传表单的方法,如图4

/* 文件上传表单,基于OSS,web直传 */

public function ossUpload(){

$this->display();

}

新建上传表单的方法

5、打开:E:\wwwroot\oss-h5-upload-js-php\index.html,复制全部内容至:E:\wwwroot\ke.hmwis.com\Application\Home\View\default\File\ossUpload.html,且调整其中的相应文件路径,如图5

编辑上传表单模板

6、打开:http://ke.ygt.cm/File/ossUpload.html ,查看网页源代码,如图6

查看上传表单网页源代码

7、复制E:\wwwroot\oss-h5-upload-js-php-callback下的相应文件至:E:\wwwroot\static.hmwis.com\ke\Public\static\oss目录,如图7

复制相应文件至对应资源目录下

8、打开:E:\wwwroot\oss-h5-upload-js-php-callback\php\get.php,导入OSS的客户端类、异常类,如图8

use OSS\OssClient;

use OSS\Core\OssException;

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

9、打开:E:\wwwroot\oss-h5-upload-js-php-callback\php\get.php,复制除function

gmt_iso8601之外的所有代码至:E:\wwwroot\ke.hmwis.com\Application\Home\Controller\FileController.class.php下的public
function ossGet(),且实例化OSS2.0.4的客户端类,如图9

新建public function ossGet(),且实例化OSS2.0.4的客户端类

10、配置zhidao.ygt.cm的虚拟主机:

* 注意:如果要使用HTTP_AUTHORIZATION头,你需要先在apache或者nginx中设置rewrite,以apache为例,修改

* 配置文件/etc/httpd/conf/httpd.conf(以你的apache安装路径为准),如图10

添加一行:

RewriteRule .* – [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]

配置zhidao.ygt.cm的虚拟主机,以使用HTTP_AUTHORIZATION头

11、编辑:E:\wwwroot\static.hmwis.com\ke\Public\static\oss\upload.js,如图11

phpUrl = ‘http://ke.ygt.cm/File/ossGet.html’

设置phpUrl

12、编辑:E:\wwwroot\oss-h5-upload-js-php-callback\callback.php,如图12

file_put_contents(‘./data/1.txt’, json_encode($body));

编辑callback.php,以测试回调数据

13、测试上传成功,如图13、14

网页直传测试成功

OSS上检测文件已经上传成功

14、测试回调成功,查看zhidao.ygt.cm/data/1.txt,如图15

“filename=user-dir%2F10.png&size=218185&mimeType=image%2Fpng&height=453&width=674”

测试回调成功

在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现Web端直传,服务端签名直传并设置上传回调的实现流程的更多相关文章

  1. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  2. Thinkphp整合阿里云OSS图片上传实例

    Thinkphp3.2整合阿里云OSS图片上传实例,图片上传至OSS可减少服务器压力,节省宽带,安全又稳定,阿里云OSS对于做负载均衡非常方便,不用传到各个服务器了 首先引入阿里云OSS类库 < ...

  3. 整合阿里云OSS

    整合阿里云OSS 一.对象存储OSS 为了解决海量数据存储与弹性扩容,采用云存储的解决方案- 阿里云OSS. 1.开通"对象存储OSS"服务 (1)申请阿里云账号 (2)实名认证 ...

  4. SpringBoot 2.0整合阿里云OSS,实现动静分离架构

    前言 相信大部分开发者对下面这张架构图并不陌生吧,现在很多网站/应用都采用了动静分离的架构进行部署.博主的博客也不例外,主机采用的是阿里云的 ECS,使用 CDN 做静态内容分发,不过静态文件还是存储 ...

  5. SpringBoot整合阿里云OSS对象存储实现文件上传

    1. 准备工作: 一.首先登录阿里云OSS对象存储控制台创建一个Bucket作为你的存储空间. 二.创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询阿里云文 ...

  6. JAVA整合阿里云OSS实现文件上传功能

    引入maven <dependency> <groupId>org.apache.commons</groupId> <artifactId>commo ...

  7. YII2与Thinkphp整合阿里云OSS

    前言: 如果上传的文件都和网站程序源代码放在一起:那是有相当多的弊端的: 1:静态文件会占用大量带宽: 2:服务器的成本略高: 常规的做法是把php源代码放到一台服务器上:图片等静态文件放在另一台服务 ...

  8. 阿里云OSS服务器的使用

    关于文件上传,我们一般使用OSS服务器.大致为两种上传方式: 详情官网参考:https://help.aliyun.com/document_detail/31927.html?spm=a2c4g.1 ...

  9. 如何用云存储和CDN加速网站图片视频、阿里云OSS的使用(转)

    总有人说阿里云主机带宽小,那只是因为你还停留在单机架构上. 阿里的架构设计,云主机主要用来跑程序的,附件的存储和访问主要靠OSS. 有人又会说了,OSS按存储费+流量双重计费伤不起,只是你不知道OSS ...

随机推荐

  1. (总结)Linux下使用rsync最快速删除海量文件的方法

    昨天遇到了要在Linux下删除海量文件的情况,需要删除数十万个文件.这个是之前的程序写的日志,增长很快,而且没什么用.这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长.所 ...

  2. PS要点

    1.通道 意味着我们同过不同的角度来看图像,可以得到不同的图像信息,PS是以灰度图像来表现这种信息的强弱. 我们能看到什么取决于我们的视角.任何灰度图像都可以按照不同的规则来构成彩色图像. 通道除了能 ...

  3. Valgrind使用[转]

    简介 调试程序有很多方法,例如向屏幕上打印消息,使用调试器,或者只需仔细考虑程序如何运行,并对问题进行有根有据的猜测. 在修复 bug 之前,首先要确定在源程序中的位置.例如,当一个程序产生崩溃或生成 ...

  4. js中冒泡事件和捕获事件

    js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获 ...

  5. 通过命令行安装Android app

    手动安装安卓app的命令为:adb install -r C:\Users\Lihao\workspace\Appium_Demo\apps\app_F_1.3.0.apk

  6. $(function(){})和$(document).ready(function(){})

    document.ready和onload的区别——JavaScript文档加载完成事件 页面加载完成有两种事件 一是ready,表示文档结构已经加载完成(不包含图片等非文字媒体文件) 二是onloa ...

  7. java书箱

    http://www.blogjava.net/kuuyee/archive/2013/06/03/400084.html http://www.blogjava.net/cheneyfree/

  8. Jquery中的offset()和position()

    今天遇到这个偏移量的问题,特做此记录.以便日后查看. 先看看这两个方法的定义. offset(): 获取匹配元素在当前视口的相对偏移. 返回的对象包含两个整形属性:top 和 left.此方法只对可见 ...

  9. RPM Fusion on CentOS7

    RPM Fusion RPM Fusion provides software that the Fedora Project or Red Hat doesn't want to ship. Tha ...

  10. 解读Nodejs多核处理模块cluster

    来源: http://blog.fens.me/nodejs-core-cluster/ 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发. ...