thinkphp5.0整合七牛云

thinkphp5.0整合七牛云项目实践,原来thinkphp3.2版本自带了七牛上传驱动。
5.0版本没有,需要自己整合进去。因为最近几个项目图片都使用了七牛,所以准备整合进去。

准备资料:
1: 七牛账号(http://developer.qiniu.com/),进去开发者账号,有api和demo代码段。
2:有使用百度的wubuploader的图片上传插件。
3:准备一张数据表,存储图片数据表(admin_upload)

sql语句准备

CREATE TABLE `oc_admin_upload` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `uid` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'UID',
  `name` varchar(255) NOT NULL DEFAULT '' COMMENT '文件名',
  `path` varchar(255) NOT NULL DEFAULT '' COMMENT '文件路径',
  `url` varchar(255) NOT NULL DEFAULT '' COMMENT '文件链接',
  `ext` char(4) NOT NULL DEFAULT '' COMMENT '文件类型',
  `size` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '文件大小',
  `md5` char(32) NOT NULL DEFAULT '' COMMENT '文件md5',
  `sha1` char(40) NOT NULL DEFAULT '' COMMENT '文件sha1编码',
  `location` varchar(15) NOT NULL DEFAULT '' COMMENT '文件存储位置',
  `download` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '下载次数',
  `create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '上传时间',
  `update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '修改时间',
  `sort` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='文件上传表';


七牛sdk准备

1:下载sdk包



2:解压


3:放入项目目录



后台php代码:

<?php
// +----------------------------------------------------------------------
// | mydinghuo [easy handle for your businesses]
// +----------------------------------------------------------------------
// | Copyright (c) 2016 http://www.weizhibao.com All rights reserved.
// +----------------------------------------------------------------------
// | Author: kevinyang <kevinyang@vip.qq.com> <http://www.weizhibao.com>
// +----------------------------------------------------------------------
namespace app\admin\controller;

use think\Controller;
use think\Db;
use think\Config;
use think\Request;
use think\File;
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
class Uploader extends Controller
{
    /**
     * 图片上传,ajax返回
     * @author  <835173372@qq.com>
     */
    public function upload(){

        $upload_config = Config::get('UPLOAD_DRIVER');
        if($upload_config == 'Local'){
            $this->local_upload();//本地存储图片
        }
        if($upload_config == 'Qiniu'){
            $this->qiniu_upload();//七牛云存储
        }

    }
    public function local_upload(){
        $filePath = $_FILES['file']['tmp_name'];
        $file = new File($filePath);
        $info = $file->webuploader_move(ROOT_PATH . 'public' . DS . 'uploads');
        if($info){
            $data['name'] = $info->getFilename();
            $data['md5'] = $info->hash('sha1');
            $data['sha1'] = $info->hash('md5');
            $data['ext'] = 'jpg';
            $data['path'] = '/uploads/' . $info->getSaveName() . 'jpg';
            $data['location'] = 'location';
            $data['create_time'] = time();
            $data['status'] = 1;
            $id = Db::name("admin_upload")->insertGetId($data);//插入图片数据
            if($id > 0){
                $return['path'] = $data['path'];
                $return['name'] = $data['name'];
                $return['id'] = $id;
            }else{
                $return['error']   = 1;
                $return['success'] = 0;
                $return['status']  = 0;
                $return['message'] = '上传出错'.$file->getError();
            }
        }else{
            // 上传失败获取错误信息
            $return['error']   = 1;
            $return['success'] = 0;
            $return['status']  = 0;
            $return['message'] = '上传出错'.$file->getError();
        }
        exit(json_encode($return));
    }

    /**
     * 图片上传,ajax返回
     * 七牛云存储图片(同时保留本地备份数据
     * @author  <835173372@qq.com>
     */
    public function qiniu_upload(){
        require_once EXTEND_PATH.'Qiniu/autoload.php';
        $config = Config::get('UPLOAD_Qiniu_CONFIG');
        $accessKey = $config['accessKey'];
        $secretKey = $config['secretKey'];
        $auth = new Auth($accessKey, $secretKey);

        $bucket = $config['bucket'];// 要上传的空间
        $token = $auth->uploadToken($bucket);// 生成上传 Token

        // 要上传文件的本地路径
        $filePath = $_FILES['file']['tmp_name'];
        $file = new File($filePath);
        $info = $file->webuploader_move(ROOT_PATH . 'public' . DS . 'uploads');//本地上传

        // 上传到七牛后保存的文件名
        if($info){
            $key = $info->getFilename();
        }else{
            $key = md5(time()).'.png';
        }
        // 初始化 UploadManager 对象并进行文件的上传
        $uploadMgr = new UploadManager();

        // 调用 UploadManager 的 putFile 方法进行文件的上传
        list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
        if ($err === null) {
            $data['url'] = $config['domain'].$ret['key'];
        }

        if($info){
            $data['name'] = $info->getFilename();
            $data['md5'] = $info->hash('sha1');
            $data['sha1'] = $info->hash('md5');
            $data['ext'] = 'jpg';
            $data['path'] = '/uploads/' . $info->getSaveName() . 'jpg';
            $data['location'] = 'location';
            $data['create_time'] = time();
            $data['status'] = 1;
            $id = Db::name("admin_upload")->insertGetId($data);//插入图片数据
            if($id > 0){
                $return['path'] = $data['path'];
                $return['name'] = $data['name'];
                $return['id'] = $id;
            }else{
                $return['error']   = 1;
                $return['success'] = 0;
                $return['status']  = 0;
                $return['message'] = '上传出错'.$file->getError();
            }
        }else{
            // 上传失败获取错误信息
            $return['error']   = 1;
            $return['success'] = 0;
            $return['status']  = 0;
            $return['message'] = '上传出错'.$file->getError();
        }
        exit(json_encode($return));
    }
}

使用到的配置文件:

<?php
//配置文件
return [
    // 文件上传默认驱动
    'UPLOAD_DRIVER' => 'Qiniu', //设置七牛上传驱动
    //'UPLOAD_DRIVER' => 'Local',
    // 七牛上传驱动配置说明
    'UPLOAD_Qiniu_CONFIG' => array(
        'secretKey' => 'LnEXgP-8F4nKn8HWzNWOF7kYXCyyYmIu', //七牛服务器
        'accessKey' => 'u1mpysU6FBNULGuJcVzGgQLJJ1zqBc3uhI', //七牛用户
        'domain'    => 'http://oetqv9f47.bkt.clouddn.com/', //七牛域名
        'bucket'    => 'test2', //空间名称
        'timeout'   => 300, //超时时间
    ),
];

在使用时候注意以下几点:

1:配合前端webuploader上传组件,核心代码段:

            // 初始化Web Uploader
            uploader = WebUploader.create({

                // 自动上传。
                auto: true,

                // swf文件路径
                swf: './public/static/plugins/webuploader/Uploader.swf',

                // 文件接收服务端。
                server: 'http://www.test2.com/admin/uploader/upload',

                // 选择文件的按钮。可选。
                // 内部根据当前运行是创建,可能是input元素,也可能是flash.
                pick: '#filePicker',
                accept: {
                    title: 'Images',
                    extensions: 'jpg,jpeg,png',
                    mimeTypes: 'image/jpg,image/jpeg,image/png'   //修改这行
                }
            });

做这个组件开发是需要一定的编码水品的。

需要熟悉前端webuploader组件,还要熟练使用php代码对接七牛云存储。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值