Thinkphp框架3.2支持七牛图片上传的配置

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

现在将配置说明一下。

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

注册七牛云,创建空间,将空间设为私有
需要记下的东西:
AK,SK,bucket
2

在config.php添加

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

3、添加一个上传类Model

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值