起因

为什么要用七牛呢。因为SAE上Storage好用是好用但是云豆消耗太厉害了。所以大量图片资源还是放在七牛比较好,价格便宜,而且还有免费的10G空间和流量,放点图片之类的挺好的速度也很快。

因为开发用的thinkphp。其中有qiniu的类但是,百度了下。这个不是直传的。需要先上传到业主服务器(就是自己网站服务器)然后由服务器传到七牛并返回结果,这么一来一回,消耗SAE流量。也是挺多的,所以研究了下本地直传的,由于刚入门,官方的demo没写注释,看的云里雾里的。摸索着弄了弄。最后还不错。自己写了通过AJAX直传DEMO并且网上这了个开源的上传插件,更改了下,完美兼容thinkphp 和七牛。

以后图片储存再也不是问题了。

举个例子吧

七牛的上传原理,很简单。用户自己写个生成uptoken的方法在自己的服务器上。然后将文件以 enctype multipart/form-data post 到 七牛提供的上传地址,同时要带上token用来验证你是否拥有上传的权限

成功则返回文件的key和HAS1。顺便说一下。这个key啊就是你要在七牛储存空间里面存放这个文件的名字。可以自定义、如果不填默认就是使用Hash值作为Key。

贴上我的部分代码吧有点乱没整理

//*
//七牛云储存文件获取
//
function Qiniu_Encode($str) // URLSafeBase64Encode
{
    $find = array('+', '/');
    $replace = array('-', '_');
    return str_replace($find, $replace, base64_encode($str));
}
function Qiniu_Sign($url) {//$info里面的url

    $setting = C ( 'UPLOAD_SITEIMG_QINIU' );
    
    $duetime =time() + 86400;//下载凭证有效时间
    $DownloadUrl = $url.'?e='.$duetime;
  
    $Sign = hash_hmac ('sha1', $DownloadUrl,$setting ["driverConfig"] ["secrectKey"],ture);
    $EncodedSign = Qiniu_Encode($Sign);
    $Token= $setting ["driverConfig"] ["accessKey"].':'.$EncodedSign;

    $RealDownloadUrl = $DownloadUrl . '&token=' . $Token;
    return $RealDownloadUrl;
}
function UploadToken(){
   $param = array('deadline' => '400',           
              'CallbackBody' => '{"name":$(fname),"size":$(fsize),"w":$(imageInfo.width),"h":$(imageInfo.height),"hash":$(etag)}', 
              'returnUrl' => '', 
        
           );
  $setting = C ( 'UPLOAD_SITEIMG_QINIU' );
  $bucket='tfimg';
      empty($param['deadline'])?$param['deadline'] = 3600:$param['deadline'];
      $param['deadline'] += time();
      $data = array('scope'=> $bucket, 'deadline'=>$param['deadline']);
      if (!empty($param['CallbackUrl'])) {
        $data['callbackUrl'] = $param['CallbackUrl'];
      }
      if (!empty($param['CallbackBody'])) {
        $data['callbackBody'] = $param['CallbackBody'];
      }
      if (!empty($param['ReturnUrl'])) {
        $data['returnUrl'] = $param['ReturnUrl'];
      }
      if (!empty($param['ReturnBody'])) {
        $data['returnBody'] = $param['ReturnBody'];
      }
      if (!empty($param['AsyncOps'])) {
        $data['asyncOps'] = $param['AsyncOps'];
      }
      if (!empty($param['EndUser'])) {
        $data['endUser'] = $param['EndUser'];
      }
      $data = json_encode($data);
      $token=Qiniu_Encode($data);//获取safebase64
      $Sign = hash_hmac ('sha1',$token,$setting ["driverConfig"] ["secrectKey"],ture);//用SK对base64token签名
      $token1=Qiniu_Encode($Sign);
      $uptoken=$setting ["driverConfig"] ["accessKey"].':'.$token1.':'.$token;
      return $uptoken;
    }

 ?>
七牛云私有文件获取token生成

喵

来自七牛的图片

想一个试用的孩子们。啊点这里进去,点这里点这里