最近有一个项目需要集成七牛云存储的图片存储和调用功能,程序是基于CodeIgniter2.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

CodeIgniter - 集成七牛云存储的更多相关文章

  1. 在 Laravel 5 中集成七牛云存储实现云存储功能

    本扩展包基于https://github.com/qiniu/php-sdk开发,是七牛云储存 Laravel 5 Storage版,通过本扩展包可以在Laravel 5中集成七牛云存储功能.   1 ...

  2. 在 Laravel 5 中集成七牛云存储实现云存储功能(非上传)

    本扩展包基于https://github.com/qiniu/php-sdk开发,是七牛云储存 Laravel 5 Storage版,通过本扩展包可以在Laravel 5中集成七牛云存储功能. 1.安 ...

  3. WP集成七牛云存储(原创)

    借助:七牛镜像存储 WordPress 插件 https://wordpress.org/plugins/wpjam-qiniu/ 安装本插件1.4.5及以上版本,请先安装并激活WPJAM BASIC ...

  4. django之集成七牛云对象存储

    Python3 + Django2.0 集成 "七牛云" 对象存储 (SDK文档地址:http://developer.qiniu.com/kodo/api/3928/error- ...

  5. ueditor上传图片到七牛云存储(form api,java)

    转:http://my.oschina.net/duoduo3369/blog/174655 ueditor上传图片到七牛云存储 ueditor结合七牛传图片 七牛的试炼 开发前的准备与注意事项说明 ...

  6. 使用Qiniu-JavaScript-SDK上传文件至七牛云存储

    一.Qiniu-JavaScript-SDK介绍 基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作. JS-SDK 兼容支持 H5 File A ...

  7. Go语言实战 - 网站性能优化第一弹“七牛云存储”

    由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...

  8. JavaWeb结合七牛云存储搭建个人相册服务

    JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应 ...

  9. 《介绍一款开源的类Excel电子表格软件》续:七牛云存储实战(C#)

    两个月前的发布的博客<介绍一款开源的类Excel电子表格软件>引起了热议:在博客园有近2000个View.超过20个评论. 同时有热心读者电话咨询如何能够在SpreadDesing中实现存 ...

随机推荐

  1. 人工神经网络(ANN)

    参考资料:http://www.cnblogs.com/subconscious/p/5058741.html 从函数上来看,神经网络是回归方程的级联叠加,用来逼近目标函数的,本质是一种模拟特征与目标 ...

  2. hdu 2084 数塔(动态规划)

    本题是一个经典的动态规划题. 直接利用记忆化搜索:见图解 Ac code : #include<stdio.h> #include<string.h> #define max( ...

  3. iptables一些经常忘掉易混淆的参数

    -A:新增加一条规则,该规则在原规则的最后面 -p:规定应用于哪种数据包,例如:tcp,udp等 -d:(destination),表示目标IP或网络 -s:(source),表示源IP或网络 -j: ...

  4. jquery插件lazyload.js延迟加载图片的使用方法

    如果一个网页很长并且有很多图片的话,下载图片就需要很多时间,那么就会影响整个网页的加载速度,而这款延迟加载插件,会通过你的滚动情况来加载你需要看的图片,然后它才会从后台请求下载图片,最后显示出来.通过 ...

  5. &#x开头的是什么编码呢。浏览器可以解释它。如&#20013;&#22269;等同与中文"中国"?

    形如—— &#dddd; &#xhhhh; &#name; ——的一串字符是 HTML.XML 等 SGML 类语言的转义序列(escape sequence).它们不是「编码 ...

  6. 转:Java NIO系列教程(五) 通道之间的数据传输

    在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...

  7. js中查找一个字符是否存在。

    <script> var a = 'd'; var re = a.indexOf('d'); ){ alert('存在'); } else { alert('不存在'); } </s ...

  8. PHP访问数据,增删改

    主页面 <h1>主页面</h1> <table width="100%" border="1" cellpadding=" ...

  9. 微信发明人竟是他!也是WeChat/Line/WhatsApp的发明者

    赵建文,很多人不知道他是谁:说到微信大家都耳熟能详吧?没错,他就是初始微信发明人,同时也是WeChat/Line/WhatsApp的发明者!正是他的专利<一种基于或囊括手机电话本的即时通讯方法和 ...

  10. wap版百度hi给你飞速的赶脚 赶紧登陆手机百度hi吧

    百度hi自然是百度自己的产品,如果你是做国内市场,这个产品应该要用一下.经常逛百度空间,有时实在受不了它的加载速度,(当然,这个跟你的网速.电脑配置.你所使用的百度空间模板等因素有关),我们看看百度空 ...