第三方资源拉取

 /**
  * 七牛云抓取文件
  * @param string $url 文件URL地址
  *
  * 参考地址:http://developer.qiniu.com/code/v6/api/kodo-api/rs/fetch.html
  */
 function qiniuFetch($url){
     $encodedURL = str_replace(array('+', '/'), array('-', '_'), base64_encode($url));
     $encodedEntryURI = str_replace(array('+', '/'), array('-', '_'), base64_encode(C('QINIU_BUCKET')));
     $url = '/fetch/' . $encodedURL . '/to/' . $encodedEntryURI;

     $sign = hash_hmac('sha1', $url . "\n", C('QINIU_SK'), true);
     $token = C('QINIU_AK') . ':' . str_replace(array('+', '/'), array('-', '_'), base64_encode($sign));

     $header = array('Host: iovip.qbox.me', 'Content-Type:application/x-www-form-urlencoded', 'Authorization: QBox ' . $token);

     $curl = curl_init();
     curl_setopt($curl, CURLOPT_URL, trim('http://iovip.qbox.me' . $url, '\n'));
     curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($curl, CURLOPT_POSTFIELDS, "");
     $result = json_decode(curl_exec($curl), true);
     curl_close($curl);

     return $result['key'] ? C('QINIU_HOST') . $result['key'] : false;
 }

上传图片(服务端)

 /**
      * 文件上传获取Token
      */
     public function getToken(){
         $type = I('get.type', 0, 'intval');
         header("Content-type:text/html;charset=utf-8");
         $data =  array("scope" => C('QINIU_BUCKET'), "deadline" => time() + 3600);
         $data1 = array_merge($data, array('returnUrl' => 'http://icms.weilt.net'.U('Home/Upload/uploadReturn'), 'returnBody' => '{"url":"'.C('QINIU_HOST').'$(key)", "size":$(fsize), "name":"$(fname)"}'));
         $token1 = $this->token($data1, C('QINIU_AK'), C('QINIU_SK'));
         $data2 = array_merge($data, array('callbackUrl' => 'http://icms.weilt.net'.U('Home/Upload/uploadCallback'), 'callbackBody' => 'url='.C('QINIU_HOST').'$(key)&size=$(fsize)&name=$(fname)'));
         $token2 = $this->token($data2, C('QINIU_AK'), C('QINIU_SK'));
         if($type == 3){
             $this->ajaxReturn(array('token1' => $token1, 'token2' => $token2));
         }else if($type == 2){
             $this->ajaxReturn($token2);
         }else{
             $this->ajaxReturn($token1);
         }
     }
     /**
      * 单文件上传返回信息
      */
     public function uploadReturn(){
         $str = json_decode(base64_decode(str_replace(array('-', '_'), array('+', '/'), $_GET['upload_ret'])), true);
         exit('{"error":0, "url": "'.$str['url'].'"}');
     }
     /**
      * 上传成功回调函数
      */
     public function uploadCallback(){
         exit('{"error":0, "url": "'.$_POST['url'].'"}');
     }

客户端

 <form method="post" action="http://upload.qiniu.com/" enctype="multipart/form-data">
     <input name="token" type="hidden" value="...">
     <input name="file" type="file" />
 </form>

可以使用回调方式,或者直接返回的方式

http

 /**
      * 发送HTTP请求方法,目前只支持CURL发送请求
      * @param string $url 请求URL
      * @param array $param GET参数数组
      * @param array $data POST的数据,GET请求时该参数无效
      * @param string $method 请求方法GET/POST
      * @param string $cert 证书文件
      * @return array 响应数据
      */
     protected static function http($url, $param, $data = '', $method = 'GET', $cert = null){
         $opts = array(CURLOPT_TIMEOUT => 30, CURLOPT_RETURNTRANSFER => 1, CURLOPT_SSL_VERIFYPEER => false, CURLOPT_SSL_VERIFYHOST => false);

         $opts[CURLOPT_URL] = $url . '?' . http_build_query($param);
         if(strtoupper($method) == 'POST'){
             $opts[CURLOPT_POST] = 1;
             $opts[CURLOPT_POSTFIELDS] = $data;
             if(is_string($data)){
                 $opts[CURLOPT_HTTPHEADER] = array('Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($data));
             }
         }

         if($cert){
             $opts[CURLOPT_SSLCERT] = 'PEM';
             $opts[CURLOPT_SSLCERT] = "/home/niu/work/www/weilt_new/cert/apiclient_cert.pem";
             $opts[CURLOPT_SSLKEYTYPE] = 'PEM';
             $opts[CURLOPT_SSLKEY] = "/home/niu/work/www/weilt_new/cert/apiclient_key.pem";
         }

         $ch = curl_init();
         curl_setopt_array($ch, $opts);
         $data = curl_exec($ch);
         $error = curl_error($ch);
         curl_close($ch);
         return $data;
     }

php总结 --- 18. 七牛云存储的更多相关文章

  1. laravel上传文件到七牛云存储

    背景 最近在用PHP和laravel框架做一个图片网站,需要将图片存贮到云端,搜索下了对比了下功能,发现七牛云存储不错(主要小流量免费),便选择使用七牛作为图片存储空间. 要实现的功能很简单,选择本地 ...

  2. Go语言实战 - 网站性能优化第一弹“七牛云存储”

    由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...

  3. JavaWeb结合七牛云存储搭建个人相册服务

    JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应 ...

  4. 《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)

    两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存 ...

  5. 为七牛云存储开发的PHP PEAR 包:Services_Qiniu

    七牛云存储Qiniu Resource (Cloud) Storage:用于存储图片.apk等静态资源. 优点: 1.使用七牛带宽和CDN,速度快,不占用开发者服务器. 2.支持图片任意格式.任意分辨 ...

  6. 如何在WordPress中使用七牛云存储

    序:七牛云存储可以方便的将网站的图片等数据镜像到七牛云存储的空间,直接从云端将数据返回给用户.这样可以大大节省网站的空间,提升网站的访问速度. 真正显示一键实现WordPress博客静态文件CDN加速 ...

  7. CodeIgniter - 集成七牛云存储

    最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter2.1.3的PHP框架.刚拿到手完全无从下手的感觉,因为像框架这种东西,想从官方的PHPSDK集成进去,需要改动很 ...

  8. PHP使用七牛云存储之图片的上传、下载、303重定向教程,CI框架实例

    网上关于七牛云存储的教程除了官网上的API文档,其他的资料太少了.研究了下API之后,现在已经能实现图片的上传和下载及上传之后的重定向. http://blog.csdn.net/cqcre/arti ...

  9. ueditor上传图片到七牛云存储(form api,java)

    转:http://my.oschina.net/duoduo3369/blog/174655 ueditor上传图片到七牛云存储 ueditor结合七牛传图片 七牛的试炼 开发前的准备与注意事项说明 ...

随机推荐

  1. github add

    https://github.com/oldbeer/test/tree/master

  2. nodejs cookie管理

    Cookie 管理 我们可以使用中间件向 Node.js 服务器发送 cookie 信息,以下代码输出了客户端发送的 cookie 信息: // express_cookie.js 文件 var ex ...

  3. python 国内源

    pipy国内镜像目前有: http://pypi.douban.com/  豆瓣 http://pypi.hustunique.com/  华中理工大学 http://pypi.sdutlinux.o ...

  4. include与require的区别?

    require()语句的性能与include()相类似,都是包括并运行指定文件.不同之处在于:对include()语句来说,在执行文件时每次都要进行读取和评估:而对于require()来说,文件只处理 ...

  5. ios学习-控制按钮图片的走动和变换

    一.项目要求:制作一个界面,通过点击按钮来控制头像(按钮)向上,向下,向左,向右移动,可以左旋转,右旋转,以及放大和缩小. 二.开发步骤: 1.通过拖动按钮到storyboard搭建UI界面(后面会写 ...

  6. 测试 Prism 语法高亮

    测试 Prism 对 C 语言的语法高亮 #include <stdio.h> #include "math.h" int main(void) { long int ...

  7. Qt::QObject类

    QObject 类是Qt 所有类的基类. QObject是Qt对象模型的核心.这个模型的中心要素就是一种强大的叫做信号与槽无缝对象沟通机制.你可以用 connect()函数来把一个信号连接到槽,也可以 ...

  8. Android 获取渠道名称

    直接看代码, //获取渠道名称public static String getChannelName(Activity ctx) { if (ctx == null) { return null; } ...

  9. DNS

  10. ISO学习中代码截图

    自定义插件 1.使用时的调用方法 导入头文件,创建对象,设置尺寸,传入数据: 2,内部方法的实现 XMGPageView.m XMGPageView.h XMGPageView.xib 注意点 自定义 ...