首页 > php教程 > php手册 > 正文

阿里云OSS轻量级Driver

php中文网
发布: 2016-06-07 11:40:16
原创
1543人浏览过

不用加载官方那一大坨sdk了,简单一点
看过网上的一些例子都过于复杂,包含了官方的phpsdk那一大坨东西,理论上我只需要简单的上传文件而已,不需要那么多东西,于是自己写了一下。

以下代码保存到/yourpath/ThinkPHP/Library/Think/Upload/Driver/Oss.class.php即可<?php <br /><br> // +----------------------------------------------------------------------<br> // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]<br> // +----------------------------------------------------------------------<br> // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.<br> // +----------------------------------------------------------------------<br> // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )<br> // +----------------------------------------------------------------------<br> // | Author: 废墟 <r.anerg> <http:><br> // +----------------------------------------------------------------------<br><br> namespace Think\Upload\Driver;<br><br> class Oss {<br><br>     const OSS_HOST = 'oss.aliyuncs.com';<br><br>     /**<br>      * 上传文件根目录<br>      * @var string<br>      */<br>     private $rootPath;<br><br>     /**<br>      * 上传错误信息<br>      * @var string<br>      */<br>     private $error  = '';<br>     private $config = array(<br>         'access_id'  =&gt; '', //阿里云Access Key ID<br>         'access_key' =&gt; '', //阿里云Access Key Secret<br>         'bucket'     =&gt; '', //空间名称<br>         'timeout'    =&gt; 90, //超时时间<br>     );<br><br>     /**<br>      * 构造函数,用于设置上传根路径<br>      * @param array  $config FTP配置<br>      */<br>     public function __construct($config) {<br>         /* 默认FTP配置 */<br>         $this-&gt;config = array_merge($this-&gt;config, $config);<br>     }<br><br>     /**<br>      * 检测上传根目录(阿里云上传时支持自动创建目录,直接返回)<br>      * @param string $rootpath   根目录<br>      * @return boolean true-检测通过,false-检测失败<br>      */<br>     public function checkRootPath($rootpath) {<br>         /* 设置根目录 */<br>         $this-&gt;rootPath = trim($rootpath, './') . '/';<br>         return true;<br>     }<br><br>     /**<br>      * 检测上传目录(阿里云上传时支持自动创建目录,直接返回)<br>      * @param  string $savepath 上传目录<br>      * @return boolean          检测结果,true-通过,false-失败<br>      */<br>     public function checkSavePath($savepath) {<br>         return true;<br>     }<br><br>     /**<br>      * 创建文件夹 (阿里云上传时支持自动创建目录,直接返回)<br>      * @param  string $savepath 目录名称<br>      * @return boolean          true-创建成功,false-创建失败<br>      */<br>     public function mkdir($savepath) {<br>         return true;<br>     }<br><br>     /**<br>      * 保存指定文件<br>      * @param  array   $file    保存的文件信息<br>      * @param  boolean $replace 同名文件是否覆盖<br>      * @return boolean          保存状态,true-成功,false-失败<br>      */<br>     public function save($file, $replace = true) {<br>         $_headers = array('Content-Type: ' . $file['type']);<br>         $resource = fopen($file['tmp_name'], 'r');<br><br>         $path = $this-&gt;rootPath . $file['savepath'] . $file['savename'];<br><br>         $uri = "/{$this-&gt;config['bucket']}{$path}";<br>         $ch  = curl_init('http://' . self::OSS_HOST . $uri);<br><br>         $date = gmdate('D, d M Y H:i:s \G\M\T');<br><br>         array_push($_headers, "Date: {$date}");<br><br>         $sign_string = "PUT\n\n" . $file['type'] . "\n" . $date . "\n" . $uri;<br>         $sign        = $this-&gt;hex_to_base64(hash_hmac('sha1', $sign_string, $this-&gt;config['access_key']));<br><br>         array_push($_headers, 'Authorization: OSS ' . $this-&gt;config['access_id'] . ':' . $sign);<br><br>         fseek($resource, 0, SEEK_END);<br>         $length = ftell($resource);<br>         fseek($resource, 0);<br><br>         array_push($_headers, "Content-Length: {$length}");<br><br>         curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");<br>         curl_setopt($ch, CURLOPT_POST, 1);<br>         curl_setopt($ch, CURLOPT_INFILE, $resource);<br>         curl_setopt($ch, CURLOPT_INFILESIZE, $length);<br>         curl_setopt($ch, CURLOPT_HTTPHEADER, $_headers);<br>         curl_setopt($ch, CURLOPT_TIMEOUT, $this-&gt;config['timeout']);<br>         curl_setopt($ch, CURLOPT_HEADER, 1);<br>         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);<br>         $response = curl_exec($ch);<br>         $status   = curl_getinfo($ch, CURLINFO_HTTP_CODE);<br>         fclose($resource);<br>         if ($status == 200) {<br>             return true;<br>         } else {<br>             $this-&gt;error = $response;<br>             return false;<br>         }<br>     }<br><br>     /**<br>      * 获取最后一次上传错误信息<br>      * @return string 错误信息<br>      */<br>     public function getError() {<br>         return $this-&gt;error;<br>     }<br><br><br>     private function hex_to_base64($str) {<br>         $result = '';<br><br>         for ($i = 0; $i              $result .= chr(hexdec(substr($str, $i, 2)));<br>         }<br><br>         return base64_encode($result);<br>     }<br><br> }</http:></r.anerg>使用方法也比较简单,如果只有一个bucket则可以把配置写入config.php里,内容如下'FILE_UPLOAD_TYPE' =&gt; 'Oss',<br> 'UPLOAD_TYPE_CONFIG' =&gt; array(<br>     'access_id' =&gt; 'access_id', //阿里云Access Key ID<br>     'access_key' =&gt; 'access_key', //阿里云Access Key Secret<br>     'bucket' =&gt; 'bucket' //阿里云的bucket<br> ),如果你需要将不同的文件存入不同的bucket则需要在上传方法中采用动态配置$config     = array(<br>     'maxSize'  =&gt; 0,<br>     'exts'     =&gt; array('jpg', 'jpeg', 'png'),<br>     'saveName' =&gt; array('uniq_photo_name', '__FILE__'),<br>     'rootPath' =&gt; '/',<br> );<br> $oss_config = array(<br>     'access_id'  =&gt; 'access_id', //阿里云Access Key ID<br>     'access_key' =&gt; 'access_key', //阿里云Access Key Secret<br>     'bucket'     =&gt; 'bucket'<br> );<br> $upload     = new \Think\Upload($config, 'Oss', $oss_config);

AD:真正免费,域名+虚机+企业邮箱=0元

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号