现在位置首页 / 项目实战 /正文

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

作者: IT小兵 | 2015年10月27日| 热度:℃ | 评论: |参与:

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

现在将配置说明一下。

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

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

在config.php添加

//七牛上传文件设置
    '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

<?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、修改调用上传类的代码

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方法

      
//上传图片
$(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);
		}         
	})	
})

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

点击阅读本文所属分类的更多文章: 项目实战 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询