七牛云ajax,七牛云调用类

基于thinkphp5.0.15, 可以扩展数据库保存

自己了个七牛云调用类,用的是官方SDK 7.2.3 直接将文件放到Qinui里

将整个Qinui文件夹放到 extend 即可。<?phpnamespace  Qiniu;require "functions.php";//use app\index\model\AdminImg;use Qiniu\Storage\BucketManager;use Qiniu\Storage\UploadManager;use Think\Config;/**

* 七牛云 使用类

*/class Qnycn{    protected $accessKey ;//七牛云 访问ID

protected $secretKey ;//七牛云 访问密钥

protected $bucket;//空间名

protected $url;//空间对应的网址

protected $imgUrlArray;//上传返回的

/**

* 文件的前缀 以字母开头 /结束 prefix 如: 'image/jpg/'

* 可以在构造函数中用用户呢称取得配置

*/

public $prefix='' ;    /**

* 图片上传配置,可在构造函数中从系统取值,不过就要去掉 static属性

*/

static private $imgconfig=array(        'types' => '.gif|.jpeg|.png|.bmp|.jpg',//图片类型

'size'  => 2*1024*1024//文件大小 2M

);    /**

* 构造函数

* 自动的初始化密钥和空间域名

* 可以在这里通过数据库处理这些

* @param  string  $prefix

*/

public function __construct($prefix=null)

{        $this->accessKey = Config::get('appkey.qnyaccessKey');        $this->secretKey = Config::get('appkey.qnysecretKey');        $this->bucket    = Config::get('appkey.qnybucket');        $this->url       = Config::get('appkey.qnyurl');        if($prefix){

(substr($prefix,-1) == '/')? $prefix : $prefix.'/';

}

}    public  function __get($name)

{        return $this->$name;

}    /**

* 我的想法是多张图片上传,将返回的图片信息在最后保存到数据库

* */

public function __destruct()

{        //trace('bb','aaa');

}    /**

* 网上抓取

* @access public

* @param  string  $url 网络上的图片地址

* @param  string  $suffix 文件后缀 默认JPG

* @return string $imgurl  图片地址

*/

public function fetchImg($url,$suffix='jpg')

{

$auth = new Auth($this->accessKey, $this->secretKey);

$bucketManager = new BucketManager($auth);

$key=date('YmdHis').rand(10000, 99999).'.'.$suffix;        list($ret, $err) = $bucketManager->fetch($url, $this->bucket, $key);        if ($err == null) {            $this->saveToDB($ret['key']);            return $this->url.$ret['key'];

}

}    /**

* 取得上传的Token

* @access public

* @param  string  $url 网络上的图片地址

* @param  string  $suffix 文件后缀 默认JPG

* @return string $imgurl  图片地址

*/

public function authUploadToken()

{        //设置了回调地址,前端就不会返回值了。

$expires=array(            'returnBody'=>'{"key":"'.$this->url.'$(key)","hash":"$(etag)","fsize":$(fsize),"name":"$(x:name)"}',            'callbackUrl' => 'https://www.wyx2013.cn/wxapi/qiniucallback',            'callbackBody' => '{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)","user":"admin"}',            'callbackBodyType' => 'application/json'

);

$auth = new Auth($this->accessKey, $this->secretKey);        return $auth->uploadToken($this->bucket, null,600, $expires);//前端上传,第三个参数为时间,不用太长

}    /**

* 图片上传

* @access public

* @param  array  $file  一个单图就是$_FILES[key] 含以下信息

* ["name"]=> string(9) "TS 37.jpg"

* ["type"] => string(10) "image/jpeg"

* ["tmp_name"] => string(14) "/tmp/phpAuVNJu"

* ["error"] => int(0)

* ["size"] => int(423024)

* 如果是单图上传 $keys = array_keys($_FILES);

* $key=$keys[0];

* if($_FILES[$key]['error'] == 0)

* $CLASS->->uploadimg($_FILES[$key]);

*

* @return string $imgurl  图片地址

*/

public function uploadimg($file)

{

$suffix=$this->checkimgfile($file['name'],$file['size']);        if($suffix){

$img=$this->uploadFile($file['tmp_name'],$suffix);

$imgurl=$this->url.$img;            $this->imgUrlArray[]=$img;            return $imgurl;//返回的是一张图片的地址

}

}    /**

* 多图上传 适用于 multiple 一定要加上

* @access public

* @param  string  $file  中的name值 不包括[]

* @return array $imgurlarray  图片地址数组

*/

public function uploadimgs($file='files')

{

$c=count($_FILES[$file]['error']);        for($i=0;$i

$suffix=$this->checkimgfile($_FILES[$file]['name'][$i],$_FILES[$file]['size'][$i]);            if($suffix){

$img=$this->uploadFile($_FILES[$file]['tmp_name'][$i],$suffix);                if($img){

$imgurlarray[]=$this->url.$img;

}

}

}        $this->saveToDB($imgurlarray);        return $imgurlarray;//调用此方法,返回的是数组

}    /**

* 文件删除

* @access public

* @param  string  $key  图片在空间的KEY值

* @return boolean 成功true 失败 false

*/

public function delete($key='')

{

$auth = new Auth($this->accessKey, $this->secretKey);// 构建鉴权对象

$bucketMgr = new BucketManager($auth);//初始化BucketManager

$err = $bucketMgr->delete($this->bucket, $key);        return $err ? true : false ;

}    /**

* 文件列表

* @access public

* @param  Boolean  $c  值为真即返 回数组 为假返回总数量

* @return array or int

*/

public function listFiles($c = false )

{

$auth = new Auth($this->accessKey, $this->secretKey);// 构建鉴权对象

$bucketMgr = new BucketManager($auth);

$bucket=$this->bucket;

$prefix = 'image/jpg/';//前缀

$marker = '';//标记

$limit = 10000;//条数

$delimiter = '/';//指定目录分隔符

list($iterms, $err) = $bucketMgr->listFiles($bucket, $prefix, $marker, $limit, $delimiter);        if ($err !== null) {            return false;//没有文件返回空

} else {            if($c){ return $iterms;  }else{ return count($iterms); }

}

}    /**

* 图片检测并返回后缀

* @access private

* @param  string  $name  图片名

* @param  int  $size  图片大小

* @return string $suffix图片后缀

*/

public function checkimgfile($name,$size)

{

$suffix=pathinfo($name, PATHINFO_EXTENSION); //取得后缀

if(stripos(self::$imgconfig['types'],$suffix) && $size<:>

}else{            return false;

}

}    /**

* 文件上传

* @access private

* @param  file $fileOjb 本地临时文件地址

* @param  string  $suffix  文件后缀

* @return mixed 成功上传 返回文件的名

*/

private function uploadFile($fileOjb,$suffix )

{

$auth = new Auth($this->accessKey, $this->secretKey);// 构建鉴权对象

$bucket = $this->bucket;// 要上传的空间

$token = $auth->uploadToken($bucket);// 生成上传 Token

$uploadMgr = new UploadManager();// 构建 UploadManager 对象

$key=date('YmdHis').rand(10000, 99999) . '.' . $suffix;//文件名 用时间命名

$key=empty($this->prefix) ? $key : $this->prefix.$key;        list($ret, $err) = $uploadMgr->putFile($token, $key, $fileOjb);//上传

return ($err !== null)? false : $ret['key'];

}    /**

* 将图片保存到表格里面

* @access private

* @param  string array  $img  单个图片为或多个图片名

* @return mixed

*/

private function saveToDB($img )

{        //$m=new AdminImg();

if(is_string($img)){            //$m->img=$img;

//$m->imgurl=$imgurl;

//$m->save();

}elseif(is_array($img)){

$url=$this->url;            foreach($img as $value){

$data[]=array('img'=>$value,'imgurl'=>$url.$value);

}            //$m->saveAll($data);

}

}

}

这里只封装了部分功能

上传文件

返回值为[{"suc":"http:// xample.com/2018033122531446150.png"},{"suc":"xxxx"}]public function ajaxuploadimgs()

{        if ( !empty($_FILES) ) {

$q = new Qnycn();        foreach ($_FILES as $key=>$file){                if ($file['error'] !== 0) {                    continue;

} else {

$imgurl = $q->uploadimg($file,$key);                    if($imgurl){

$c[] = array('suc'=>$imgurl);

}else{

$c = array('err'=>'七牛云上传失败');

}

}

}            return json_encode($c);

}         return false;

}

如果是多个图片上传会产生一个问题,会调用多次类,可以将调用方也写到Qnycn的类里面。

附上jQuery上传代码。

$(document).ready(function(){

$("#ajaxfiles").change(function() {            var paths = document.getElementById("ajaxfiles").files;            var formData=new FormData();            for(var i=0;i

formData.append(paths[i].name,paths[i]);

}

$.ajax({                url: "/admin/ajaxuploadimgs",                type: 'POST',                data: formData,                dataType:"json",                processData: false,                contentType: false,                success: function (date) {

$.each(date, function(i, item){                        if(item.suc){

alert(tem.suc);

}else {

alert(item.err);

}

});

}

});

});

});

作者:吴孝青

链接:https://www.jianshu.com/p/cf105fc67d9c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值