第三方资源拉取

 /**
  * 七牛云抓取文件
  * @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. 详解JS跨域问题

    什么是跨域? 概念:只要协议.域名.端口有任何一个不同,都被当作是不同的域.             JavaScript   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  2. c++减法高精度算法

    c++高精度算法,对于新手来说还是一大挑战,只要克服它,你就开启了编程的新篇章,算法. 我发的这个代码并不是很好,占用内存很多而且运行时间很长(不超过0.02秒),但是很好理解,很适合新手 高精算法的 ...

  3. android stduio 引入 .so

  4. TCPReplay使用---张子芳

    TCPReplay主要功能是将PCAP包重新发送,用于性能或者功能测试.但是在测试环境与原转包系统结构一般是不同的.比如被测试机的二层MAC地址与抓包机器的MAC不同,所以被测试机在二层处理时发现目的 ...

  5. Notepad++自动刷新文本

    现在的日志信息往往都是打印在硬盘上,而不是保存到线上,所以我们常常会使用notepad++来查看硬盘上的文本文件 这时往往会出现两个问题 (1)在notepad++长时间最小化后,再次打开会提示是否下 ...

  6. win8.1中安装sql2014 0x800F0906 【 Error while enabling Windows feature : NetFx3, Error Code : -2146498298 】

    安装sql2012 需要安装net3.5  没有的话 安装不成功 Error while enabling Windows feature : NetFx3, Error Code : -214649 ...

  7. .net之工作流工程展示及代码分享(一)工作流表单

    Workflow表单的作用是能够在客户端进行表单设计,然后在流程中动态开放哪些输入框可以供用户填写. 在这里我扩展了一个常用的WebEditor工具——KindEditor,能够插入自定义的html符 ...

  8. 关于SMBIOS

    一, 1.什么是SMBIOS? A: SMBIOS(System Management BIOS),是主板或者系统制造者以标准的格式显示产品管理信息所需遵循的统一规范.也就是不管你是怎么去实现的,结果 ...

  9. 关于strlen误用的一点记录

    今天帮一个朋友查一个错误,是运行时报vector iterator incompatible,一般这种问题是向量和迭代器的类型不兼容,或者是进行迭代器判等时前后向量的结构发生变化,如erase操作之后 ...

  10. netty 解决TCP粘包与拆包问题(二)

    TCP以流的方式进行数据传输,上层应用协议为了对消息的区分,采用了以下几种方法. 1.消息固定长度 2.第一篇讲的回车换行符形式 3.以特殊字符作为消息结束符的形式 4.通过消息头中定义长度字段来标识 ...