开发者社区> suboysugar> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

CodeIgniter - 集成七牛云存储

简介: 最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter 2.1.3的PHP框架。刚拿到手完全无从下手的感觉,因为像框架这种东西,想从官方的PHPSDK集成进去,需要改动很多地方。
+关注继续查看

最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter 2.1.3的PHP框架。刚拿到手完全无从下手的感觉,因为像框架这种东西,想从官方的PHPSDK集成进去,需要改动很多地方。还好,有前辈蹚水,我等后辈直接参考或者说是拿来用了。上传插件采用的是plupload。

plupload:www.plupload.com/

多附件上传控件plupload的使用心得:www.cnblogs.com/luckybird/archive/2013/01/15/2861072.html

七牛云存储:qiniu.com

为做备份之用,还是整篇拉过来一份吧:

最近想做个相册系统,平时都是使用ThinkPHP来开发的,但是这次想换一个PHP框架试试,于是选择了CodeIgniter框架,因为熟悉了TP框架,所以CodeIgniter学起来也相对容易点.
网上搜了一下,几乎没有CodeIgniter结合七牛的案例,加上自己也是初次使用CodeIgniter和七牛,所以花了一整天的时间在研究这个,用到的上传插件是Plupload,在这里分享给大家,希望对大家有帮助。
修改七牛php-sdk
首先下载七牛的php-sdk,将压缩包内的qiniu文件夹放置到CodeIgniter框架application\libraries\文件夹下.因为CodeIgniter的类库对命名有要求,而七牛sdk的类库文件名和类名不一致,所以需要稍微修改下sdk里面的文件名.

将io.php修改为Qiniu_PutExtra.php
将rs.php修改为Qiniu_RS_GetPolicy.php
将fop.php修改为Qiniu_ImageView.php

引入Plupload并初始化

<script type="text/javascript" src="<?php echo base_url(); ?>public/js/jquery-1.11.1.min.js" ></script>
<script type="text/javascript" src="<?php echo base_url(); ?>public/js/plupload/plupload.full.min.js" ></script>
<script type="text/javascript" src="<?php echo base_url(); ?>public/js/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js" ></script>
<script type="text/javascript" src="<?php echo base_url(); ?>public/js/plupload/i18n/zh_CN.js" ></script>
<link rel="stylesheet" href="<?php echo base_url(); ?>public/js/plupload/jquery.plupload.queue/css/jquery.plupload.queue.css" />

 

在模板中添加标签,用于显示上传区域

<div id="muilti_uploader">
    <p>你的浏览器没有安装Flash插件,或不支持HTML5</p>
</div>

 

设置参数,初始化Plupload(下面有个eval的地方需要手动去掉中间的空格)

<script type="text/javascript">
$(function() {
    var photos = Array(); // 用于存放照片信息
    // 设置参数,初始化Plupload

    $("#muilti_uploader").pluploadQueue({

        runtimes : 'html5,flash,silverlight,html4',

        url : "http://up.qiniu.com/",

        chunk_size : '512kb',

        rename : true,

        dragdrop: true,

        filters : {

            max_file_size : '10mb',

            mime_types: [

                {title : "Image files", extensions : "jpg,jpeg,gif,png"},

                {title : "Zip files", extensions : "zip"}

            ]

        },

        multipart: true,

        multipart_params: {

            'token': '<?php echo $upToken;?>', //token,需要从服务器获取

        },

        flash_swf_url : '<?php echo base_url(); ?>public/js/plupload/Moxie.swf'

    });

 

    var uploader = $('#muilti_uploader').pluploadQueue();

    //上传文件之前触发

    uploader.bind('BeforeUpload', function(uploader, file){

        var file_ext = file.name.substr(file.name.lastIndexOf(".")); // 图片后缀

        //指定文件的名称,如果不设置,七牛会默认将文件的hash值作为文件的名字

        uploader.settings.multipart_params.key = parseInt(new Date().valueOf()/1000) + '-' + parseInt(Math.random()*8999 + 1000) + file_ext;

    });

    //成功上传一个文件后触发

    uploader.bind('FileUploaded', function(uploader, file, responseObject) {

        //将七牛返回的json数据转换成对象

        var res = ev al('('+responseObject.response+')'); 

        //组合文件信息

        var photo = new Object();

        //因为在数据库中,我用字段名name来存储文件名,用path来存储七牛上的文件名

        //所以这里的photo对象属性为name和path,如果你用的字段名和我的不一样,请自行修改

        photo.name = file.name; // 上传之前的图片名称

        photo.path = res.key; // 保存后的图片名称(含前缀)

        photos.push(photo); //将对象压入到photos数组

 

    });

    //全部文件上传完成后触发

    uploader.bind('UploadComplete', function(uploader, file){

        //文件全部成功上传后,将数据传递给CI框架进行处理

        $.ajax({

            url: "<?php echo site_url('photo/save'); ?>", //ci框架处理地址

            type: "POST",

            data: {files:JSON.stringify(photos)},

            success: function(msg){

                ale rt(msg);

            }

        });

    });

});

</script>

 

 

CodeIgniter代码部分

在控制器中编写一个方法,用来显示刚才的视图页面.

 

/**

 * 上传照片页面

 * @return void

 */

public function upload()

{

    //载入七牛sdk类库

    $this->load->library('qiniu/Qiniu_PutExtra');

    $this->load->library('qiniu/Qiniu_RS_GetPolicy');

 

    //配置七牛云存储,请查看自己的七牛账号

    $bucket = ""; //你的七牛云存储的空间名称

    $accessKey = ''; //公钥

    $secretKey = ''; //密钥

 

    Qiniu_SetKeys($accessKey, $secretKey);

    $putPolicy = new Qiniu_RS_PutPolicy($bucket);

    //生成token

    $data['upToken'] = $putPolicy->Token(null);

 

    //载入视图

    $this->load->view('photo_upload', $data);

}

 

编写一个方法,用来存储文件信息到自己的数据库.

 

/**

 * 保存照片

 * @return string

 */

public function save()

{

    //载入七牛SDK类库

    $this->load->library('qiniu/Qiniu_RS_GetPolicy');

    $this->load->library('qiniu/Qiniu_ImageView');

 

    $bucket = ""; //你的七牛云存储的空间名称

    $domain = ''; //你的七牛云存储空间的地址

    $accessKey = ''; //公钥

    $secretKey = ''; //密钥

    Qiniu_SetKeys($accessKey, $secretKey);

 

    $imgInfo = new Qiniu_ImageInfo;

 

    // 组合数据

    if (isset($_POST['files']) && !empty($_POST['files'])) {

        $files = json_decode($_POST['files'], true);

        foreach ($files as $key => $value) {

            //生成baseUrl

            $baseUrl = Qiniu_RS_MakeBaseUrl($domain, $value['path']);

            //生成fopUrl

            $imgInfoUrl = $imgInfo->MakeRequest($baseUrl);

            //获取七牛上的图片属性

            // format       图片类型,如png、jpeg、gif、bmp等。

            // width        图片宽度,单位:像素(px)。

            // height       图片高度,单位:像素(px)。

            // colorModel   彩色空间,如palette16、ycbcr等。

            // frameNumber  帧数,gif 图片会返回此项。

            $arr = json_decode(file_get_contents($imgInfoUrl), true);

            $files[$key]['name'] = substr($value['name'], 0, strrpos($value['name'], '.')); //只保留文件名部分,去除文件名后缀

            $files[$key]['width'] = $arr['width']; //图片宽度

            $files[$key]['height'] = $arr['height']; //图片高度

            $files[$key]['create_time'] = time();//创建时间

        }

    }

 

    // 插入数据库

    if ($this->db->insert_batch('photos', $files)) {

        echo '上传成功';

        die;

    } else {

        echo '上传失败';

        die;

    }

}

代码中注释写的很全,应该没有需要补充的地方了,代码拿来直接可用,非常省心

参考文章:codeigniter.org.cn/forums/thread-19738-1-1.html

如何联系我:【万里虎】www.bravetiger.cn 【QQ】3396726884 (咨询问题100元起,帮助解决问题500元起) 【博客】http://www.cnblogs.com/kenshinobiy/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PhalApi 2.x 开发文档 如何升级PhalApi?
PhalApi开源生态,主要分为四部分。 第一部分:phalapi/phalapi项目 第二部分:phalapi/kernal内核 第三部分:plugins第三方应用插件 第四部分:library扩展类库
0 0
Magento开发有哪些功能呢?
电子商务系统的数据是企业的商业机密。 Magento支持SSL加密传输前台和后台数据并且支持后台权限的分级控制,确保您的数据万无一失。
1416 0
laravel框架搭建voyager
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengyi_L/article/details/82385984 voyager是一个用于后台管理的laravel扩展 首先搭建laravel环境 1.
1430 0
x3d
译 PrestaShop开发者指南 第四篇 深入PrestaShop核心开发
## 访问数据库 ### 数据库结构 PrestaShop的数据库表默认带有ps_的前缀,前缀在安装时可以自定义。 所有表名都是小写,以下划线分割。当一个表表示要在两个实体间建立连接时,表名中两个实体的的名称都要出现,比如ps_category_product表示将产品关联到对应的分类。
728 0
七牛云存储开发图片上传功能
1、注册登录七牛云,并实名认证,对象存储控制台,新增bucket存储空间 2、nodejs服务器安装npm install qiniu --save const common = require('.
612 0
NetCore开发的分布式文件上传系统
一个基于.Net Core构建的简单、跨平台分布式文件上传系统,支持分块上传、多个项目同时上传、接口权限控制采用JWT机制。
0 0
WP集成七牛云存储(原创)
  借助:七牛镜像存储 WordPress 插件 https://wordpress.org/plugins/wpjam-qiniu/ 安装本插件1.4.5及以上版本,请先安装并激活WPJAM BASIC插件。
2035 0
+关注
suboysugar
目前为自由职业者,从事BA业务分析和互联网产品设计等工作,本人先后在中关村在线、中国工商银行和神州数码工作。拥有互联网,移动互联网,软件公司等开发经历。计算机本科毕业,8年互联网和软件行业经验。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务
立即下载
混合应用平台构建实战
立即下载
如何创建一个成功的(在业务和开发中)开源项目
立即下载