让codeigniter与swfupload整合的最佳解决方案
codeigniter是一款轻量,便捷的MVC框架,最近的项目涉及到批量上传,于是,就是用了swfupload这个插件,虽然网上有很多关于ci与swfupload的帖子,不过,并不是很完整,所以,这里综合各家优点,经过自己实际经验,做了下整理。
问题1:获取不到文件类型?
回答:由于SWFUPLOAD所有类型文件的MIME均为application/octet-stream,故使用Codeigniter自带的上传类无法准确获取是否为图片,根据ci官方的wiki已经给出了解答
Inyourviewfile,includetheSWFUploadjavascriptfile:
Inyourcontroller,pass“Filedata”asthenamevalueforthedo_uploadfunction:
$this->upload->do_upload("Filedata")
Inyourmimes.phpfile,add‘application/octet-stream"forallallowedimageformats
"gif" => array("image/gif","application/octet-stream"),
"jpeg" => array("image/jpeg","image/pjpeg","application/octet-stream"),
"jpg" => array("image/jpeg","image/pjpeg","application/octet-stream"),
"jpe" => array("image/jpeg","image/pjpeg","application/octet-stream"),
"png" => array("image/png", "image/x-png","application/octet-stream"),
问题2:带有session验证的后台,会导致上传后退出登陆的状况
回答:
一般方法:swfuplaod在上传时,会新开一个进程,和原来的进程不一致,要解决这个问题,需要指定session_id,然后在登录页面判断,如果有post过来的session_id,那么就用函数session_id($_POST["PHP_SESSIONID"])指定一下。
上传页的JS里面,可以获取当前的SESSION_ID的。
ci中的状态:一般情况下,因为诸如uploadify,swfupload采用的都是flash客户端,这样它们产生的useragent与用户使用浏览器的user-agent必然不同。所以,虽然用户登录了你的系统产生了一个session,但是当触发上传程序时会产生另一个session(在上述useragent选项开启的情况下)。
所以,不是session丢失了,而是当你上传文件时,CI为uploadify另外创建了一个session。
解决方法1:将$config["sess_match_useragent"]设置成FALSE,重试。
解决方法2(推荐):为了安全起见,不建议使用第1条解决方案,而是使用另外的验证方法,比如在每次上传时,在url中附加一个token与服务器端的token比对(比如这个token可以是用户名的hash值)。具体实现方法请参考stblog的上传验证实现(使用的是swfupload)。----我尝试了这个方法,重点在于,如果你的session类是放在autoload里自动加载的,那么,这样肯定是失败的,解决办法是,新建一个类,例如MY_Controller继承于CI_Controller,用于后台登陆,需要权限判断后台处理,讲upload类继承于CI_Controller这样的话,就不经过session类的验证了,当然上传还是得验证,不过可以用post_params传值进行验证:
示例:
//*******
//*****
}
//~~~~~~~~~~~~~~~~~
classclient_photoextendsMY_Controller{
function__construct(){
parent::__construct();
}
functionindex(){
}
}
//~~~~~~~~~~~~~~~~~~~~~
classMY_ControllerextendsCI_Controller{
publicfunction__construct(){
parent::__construct();
$this->load->library("session");
}
}
相关文章
- 解析|当前企业OA系统面对的困难与解决方案
- 1. Oracle:掌握数据库世界领域最佳解决方案(oracle加序号)
- 服务器c1s Linux服务器:最佳的网络解决方案(c1slinux)
- 58同城、安居客“优品旗舰店”沈阳上线 打造房产平台高效营销解决方案
- Linux下面最佳Qt Dev解决方案(qtforlinux)
- 深入了解Oracle AGIS:实现财务共享服务的最佳解决方案(oracleagis)
- Redis双写:实现高可用性和数据安全性的最佳解决方案(redis双写)
- networking重置Linux网络连接:一种新的智能解决方案(linuxreset)
- Oracle数据分析:最佳实践解决方案(oracle数据分析工具)
- Oracle应用开发指南:最佳实践与解决方案(oracle应用开发答案)
- SQL Server客服:满足您的一站式解决方案(sqlserver客服)
- SQL Server 主程序:最佳解决方案(sqlserver主程序)
- SQL Server 个人版:最佳的个人数据库解决方案(sqlserver个人版)
- MDB和Oracle:最佳数据库技术解决方案(mdb oracle)
- MS SQL虚拟机:最佳解决方案(mssql 虚拟机)
- Linux 下载速度慢:排查与解决方案(linux下载慢)
- Oracle数据库全字段比较实现一体化解决方案(oracle全字段比较)
- 解决方案Oracle数据库URL修改帮助(oracle修改url)
- MySQL中默认时间无法使用问题解决方案(mysql不能用默认时间)
- Redis集群最佳解决方案(redis集群用什么)