123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- <?php
- namespace fast\service;
- use think\Config;
- use think\Log;
- /**
- * 七牛上传文件管理
- */
- class Qiniu
- {
- const QINIU_RS = 'http://rs.qbox.me';
- static $_config = null;
- /**
- * 获取文件
- *
- * @param string $domain 域名
- * @param string $name 文件名
- * @param string $param 附加参数
- * @return string
- */
- public static function download($domain, $name, $param = [])
- {
- $url = $domain . $name . '?' . http_build_query($param);
- $token = self::sign($url);
- return $url . '&token=' . $token;
- }
- /**
- * 重命名【移动】
- *
- * @param string $from 来源位置
- * @param string $to 目标位置
- * return bool
- */
- public static function move($from, $to)
- {
- // $bucket = $this->_config['bucket'];
- $op = '/move/' . self::qiniuEncode($from) . '/' . self::qiniuEncode($to);
- return self::opration($op);
- }
- /**
- * 复制文件
- *
- * @param string $from 来源文件
- * @param string $saveas 目标文件
- * @return bool
- */
- public static function copy($from, $saveas)
- {
- // $bucket = $this->_config['bucket'];
- $op = '/copy/' . self::qiniuEncode($from) . '/' . self::qiniuEncode($saveas);
- return self::opration($op);
- }
- /**
- * 获取token
- *
- * @param string $bucket 空间名
- * @param string $key 密钥
- * @param int $max 文件大小限制
- * @param int $timeout 超时时间
- * @return string
- */
- public static function getToken($bucket, $key, $max = 10485760, $timeout = 600)
- {
- $setting = array(
- 'scope' => $bucket,
- 'saveKey' => $key,
- 'deadline' => $timeout + $_SERVER['REQUEST_TIME'],
- 'fsizeLimit' => intval($max),
- );
- $setting = self::qiniuEncode(json_encode($setting));
- return self::sign($setting) . ':' . $setting;
- }
- /**
- * 删除
- *
- * @param string $uri 文件路径
- * @return boolean
- */
- public static function delete($uri)
- {
- $file = self::qiniuEncode($uri);
- return self::opration('/delete/' . $file);
- }
- /**
- * 判断文件是否存在
- *
- * @param string $uri
- * @return boolean
- */
- public static function has($uri)
- {
- $op = '/stat/' . self::qiniuEncode($uri);
- return self::opration($op);
- }
- /**
- * 转pdf
- *
- * @param string $bucket
- * @param string $key
- * @param string $saveas
- * @return boolean
- */
- public static function toPdf($bucket, $key, $saveas)
- {
- $API = 'http://api.qiniu.com';
- $op = '/pfop/';
- $data = 'bucket=' . $bucket . '&key=' . $key . '&fops=yifangyun_preview|saveas/' . self::qiniuEncode($saveas);
- return self::opration($op, $data, $API);
- }
- /**
- * 七牛操作
- *
- * @param string $op 操作命令
- * @param string $data 操作结果
- * @param string $host
- * @return boolean
- */
- private static function opration($op, $data = null, $host = self::QINIU_RS)
- {
- $token = self::sign(is_string($data) ? $op . "\n" . $data : $op . "\n");
- $url = $host . $op;
- $header = array('Authorization: QBox ' . $token);
- if ($ch = curl_init($url))
- {
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
- if ($data)
- {
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
- }
- curl_setopt($ch, CURLOPT_HEADER, 1);
- $response = curl_exec($ch);
- $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- curl_close($ch);
- if ($status == 200)
- {
- return true;
- }
- // elseif (\Config::get('debug'))
- // {
- // /*操作出错*/
- // \Log::debug($response, '七牛请求出错');
- // }
- }
- Log::error('[QINIU]七牛错误' . $url . ':' . ($response ? : '请求失败'), 'ERROR');
- return false;
- }
- /**
- * 获取url签名
- *
- * @param string $url
- * @return string
- */
- private static function sign($url)
- {
- $config = self::$_config ? : (self::$_config = Config::get('service.qiniu'));
- $sign = hash_hmac('sha1', $url, $config['secretkey'], true);
- $ak = $config['accesskey'];
- return $ak . ':' . self::qiniuEncode($sign);
- }
- /**
- * 七牛安全编码
- */
- private static function qiniuEncode($str)
- {
- return strtr(base64_encode($str), ['+' => '-', '/' => '_']);
- }
- }
|