当前位置:首页 > CMS教程 > Thinkphp > 列表

配置Thinkphp3.2支持七牛图片上传的方法

发布:smiling 来源: PHP粉丝网  添加日期:2016-08-25 14:01:33 浏览: 评论:0 

七牛图片上传方法我们只要在框架中配置它的接口及上传的些小细节就可以实现了,下面一起来看一个关于配置Thinkphp3.2支持七牛图片上传的方法,希望文章对各位有帮助.

作为php菜鸟,在公司捣鼓的一个基于thinkphp框架项目上要是用七牛(原来有用过C#版本的sdk),现在在官方找到php的官方sdk,最后发现原来Thinkphp已经支持驱动类型是qiniu的文件上传了.

现在将配置说明一下。

利用七牛云私有空间存储文件

注册七牛云,创建空间,将空间设为私有

需要记下的东西:

AK,SK,bucket

在config.php添加:

  1. //七牛上传文件设置 
  2.     'PICTURE_UPLOAD_DRIVER'=>'Qiniu',    
  3.     //本地上传文件驱动配置 
  4.     'UPLOAD_LOCAL_CONFIG'=>array(), 
  5.   'UPLOAD_QINIU_CONFIG'=>array
  6.         'accessKey'=>'l3N4q0XCqm0rssaaMTHryZYG-LnKMH'
  7.         'secrectKey'=>'7qPVaeRasasan2TjALqQAjF0h6jOt0D1jF'
  8.         'bucket'=>'yaasasnbao'
  9.         'domain'=>'7xasssa.com2.z0.glb.qiniucdn.com'
  10.         'timeout'=>3600, 
  11.     ), 

3、添加一个上传类Model

  1. <?php 
  2. // +---------------------------------------------------------------------- 
  3. // | OneThink [ WE CAN DO IT JUST THINK IT ] 
  4. // +---------------------------------------------------------------------- 
  5. // | Copyright (c) 2013 http://www.onethink.cn All rights reserved. 
  6. // +---------------------------------------------------------------------- 
  7. // | Author: huajie <banhuajie@163.com> 
  8. // +---------------------------------------------------------------------- 
  9. namespace Admin\Model; 
  10. use Think\Model; 
  11. use Think\Upload; 
  12. /** 
  13.  * 图片模型 
  14.  * 负责图片的上传 
  15.  */ 
  16. class PictureModel extends Model{ 
  17.     /** 
  18.      * 自动完成 
  19.      * @var array 
  20.      */ 
  21.     protected $_auto = array
  22.         array('status', 1, self::MODEL_INSERT), 
  23.         array('create_time', NOW_TIME, self::MODEL_INSERT), 
  24.     ); 
  25.     /** 
  26.      * 文件上传 
  27.      * @param  array  $files   要上传的文件列表(通常是$_FILES数组) 
  28.      * @param  array  $setting 文件上传配置 
  29.      * @param  string $driver  上传驱动名称 
  30.      * @param  array  $config  上传驱动配置 
  31.      * @return array           文件上传成功后的信息 
  32.      */ 
  33.     public function upload($files$setting$driver = 'Local'$config = null){ 
  34.         /* 上传文件 */ 
  35.           
  36.         $Upload = new Upload($setting$driver$config); 
  37.         $info  = $Upload->upload($files); 
  38.         if($info){ //文件上传成功,记录文件信息 
  39.             
  40.             return $info//文件上传成功 
  41.         } else { 
  42.             $this->error = $Upload->getError(); 
  43.             return false; 
  44.         } 
  45.     } 
  46.     /** 
  47.      * 下载指定文件 
  48.      * @param  number  $root 文件存储根目录 
  49.      * @param  integer $id   文件ID 
  50.      * @param  string   $args     回调函数参数 
  51.      * @return boolean       false-下载失败,否则输出下载文件 
  52.      */ 
  53.     public function download($root$id$callback = null, $args = null){ 
  54.         /* 获取下载文件信息 */ 
  55.         $file = $this->find($id); 
  56.         if(!$file){ 
  57.             $this->error = '不存在该文件!'
  58.             return false; 
  59.         } 
  60.         /* 下载文件 */ 
  61.         switch ($file['location']) { 
  62.             case 0: //下载本地文件 
  63.                 $file['rootpath'] = $root
  64.                 return $this->downLocalFile($file$callback$args); 
  65.             case 1: //TODO: 下载远程FTP文件 
  66.                 break
  67.             default
  68.                 $this->error = '不支持的文件存储类型!'
  69.                 return false; 
  70.         } 
  71.     } 
  72.     /** 
  73.      * 检测当前上传的文件是否已经存在 
  74.      * @param  array   $file 文件上传数组 
  75.      * @return boolean       文件信息, false - 不存在该文件 
  76.      */ 
  77.     public function isFile($file){ 
  78.         if(emptyempty($file['md5'])){ 
  79.             throw new \Exception('缺少参数:md5'); 
  80.         } 
  81.         /* 查找文件 */ 
  82.         $map = array('md5' => $file['md5'],'sha1'=>$file['sha1'],); 
  83.         return $this->field(true)->where($map)->find(); 
  84.     } 
  85.     /** 
  86.      * 下载本地文件 
  87.      * @param  array    $file     文件信息数组 
  88.      * @param  callable $callback 下载回调函数,一般用于增加下载次数 
  89.      * @param  string   $args     回调函数参数 
  90.      * @return boolean            下载失败返回false 
  91.      */ 
  92.     private function downLocalFile($file$callback = null, $args = null){ 
  93.         if(is_file($file['rootpath'].$file['savepath'].$file['savename'])){ 
  94.             /* 调用回调函数新增下载数 */ 
  95.             is_callable($callback) && call_user_func($callback$args); 
  96.             /* 执行下载 */ //TODO: 大文件断点续传 
  97.             header("Content-Description: File Transfer"); 
  98.             header('Content-type: ' . $file['type']); 
  99.             header('Content-Length:' . $file['size']); 
  100.             if (preg_match('/MSIE/'$_SERVER['HTTP_USER_AGENT'])) { //for IE 
  101.                 header('Content-Disposition: attachment; filename="' . rawurlencode($file['name']) . '"'); 
  102.             } else { 
  103.                 header('Content-Disposition: attachment; filename="' . $file['name'] . '"'); 
  104.             } 
  105.             readfile($file['rootpath'].$file['savepath'].$file['savename']); 
  106.             exit
  107.         } else { 
  108.             $this->error = '文件已被删除!'
  109.             return false; 
  110.         } //phpfensi.com 
  111.     } 
  112.     /** 
  113.      * 清除数据库存在但本地不存在的数据 
  114.      * @param $data 
  115.      */ 
  116.     public function removeTrash($data){ 
  117.         //$this->where(array('id'=>$data['id'],))->delete(); 
  118.     } 

4、修改调用上传类的代码

  1. public function ImgUpload() 
  2.     { 
  3.         //$this->error("没有文件!"); 
  4.         //TODO: 用户登录检测  
  5.         /* 调用文件上传组件上传文件 */ 
  6.         $Picture = D('Picture'); 
  7.         $pic_driver = C('PICTURE_UPLOAD_DRIVER'); 
  8.         $info = $Picture->upload( 
  9.             $_FILES
  10.             C('PICTURE_UPLOAD'), 
  11.             C('PICTURE_UPLOAD_DRIVER'), 
  12.             C("UPLOAD_&#123;&#36;pic_driver&#125;_CONFIG"
  13.         ); //TODO:上传到远程服务器 
  14.         /* 记录图片信息 */ 
  15.         if($info){ 
  16.             /* 返回JSON数据 */ 
  17.            echo json_encode($info); 
  18.              
  19.         } else { 
  20.             echo json_encode($info); 
  21.         }  
  22.     } 

5、在客户端使用ajaxfileupload调用php方法

  1. //上传图片 
  2. $(document).on('change','#upfile',function(){ 
  3.     $.ajaxFileUpload({ 
  4.         url:'{:U("Company/ImgUpload")}'
  5.         secureuri:false, 
  6.         fileElementId:'upfile'
  7.         dataType: 'json'
  8.         type:'post'
  9.         data: { fileElementId: 'upfile'}, 
  10.         success: function (data) { 
  11.                
  12.         $('#showimg').attr('src',data.upfile.url); 
  13.         $('#imageurl').val(data.upfile.url); 
  14.         }          
  15.     })  
  16. }) 

这里最好使用json的数据类型进行传输.

Tags: Thinkphp3 2 七牛图片

分享到: