codeigniter是一款轻量,便捷的MVC框架,最近的项目涉及到批量上传,于是,就是用了swfupload这个插件,虽然网上有很多关于ci与swfupload的帖子,不过,并不是很完整,所以,这里综合各家优点,经过自己实际经验,做了下整理。
问题1:获取不到文件类型?
回答: 由于SWFUPLOAD所有类型文件的MIME均为application/octet-stream,故使用Codeigniter自带的上传类无法准确获取是否为图片,根据ci官方的wiki已经给出了解答
In your view file, include the SWFUpload javascript file:
<script type="text/javascript" src="jscripts/SWFUpload/mmSWFUpload.js"></script> In your controller, pass “Filedata” as the name value for the do_upload function: $this->upload->do_upload('Filedata') In your mimes.php file, add ‘application/octet-stream' for all allowed image formats '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'),
回答:
一般方法: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传值进行验证:
示例:
class Upload extends CI_Controller { //******* //***** } //~~~~~~~~~~~~~~~~~ class client_photo extends MY_Controller { function __construct() { parent::__construct(); } function index() { } } //~~~~~~~~~~~~~~~~~~~~~ class MY_Controller extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('session'); } }
本文向大家介绍CodeIgniter整合Smarty的方法详解,包括了CodeIgniter整合Smarty的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了CodeIgniter整合Smarty的方法。分享给大家供大家参考,具体如下: CI3.0.2发布后感觉模板类还是不怎么好用,而且不能编译。Smarty功能强大,用习惯了Smarty标签,一般难以放弃,而且,是可以编译文件执行
本文向大家介绍IONIC自定义subheader的最佳解决方案,包括了IONIC自定义subheader的最佳解决方案的使用技巧和注意事项,需要的朋友参考一下 IONIC subheader是我们常用的一个css 属性,但是这个subheader的高度是固定的,当然也是可以改变的,但是如果改了subheader的告诉,还要更改content的top值,稍微有些麻烦,如果是动态告诉的subheade
问题内容: 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django-openid-auth,似乎已经死了 django-authopenid django-socialauth(还提供对Twitter和Facebook帐户的身份验证) django-socialregistration(也具有Fa
问题内容: 我们构建3层企业解决方案,通常由几个webapp和ejbjar模块组成,这些模块都与数据库通信并具有多个外部集成点。 每个模块通常需要自己的配置,这些配置可以在解决方案的生命周期内进行更改。部署它成为一场噩梦,因为现在我们必须记住18个属性文件以进行复制和配置,还需要设置数据源,队列,内存需求等。 我希望但不能乐观地找到更好的方法。我们考虑/使用过的一些选项,各有其优缺点: 使用多
问题内容: 我正在通过AngularJS教程进行工作。Angular使用它自己的JS路由机制来允许单页应用程序。Angular的示例路由文件如下所示: 我试图找到一个存储我的局部文件(特定于Angular的HTML文件)的好地方。理想情况下,我希望能够从Play中对其进行模板化(例如,将其作为* .scala.html文件)。我可以使用aa播放路由文件来完成此操作,如下所示: 我基本上偏向于这样的
问题内容: 请注意 :这是一个古老的问题,带有古老的答案。现在大多数链接的应用程序都不再需要维护。这些天来,大多数人似乎都使用django- allauth 或python-social- auth 。为了后代的缘故,下面将完整保留原始问题。 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django