让codeigniter与swfupload整合的最佳解决方案
网上关于codeigniter与swfupload的帖子虽然不少,但总觉得有些零散,不够完整。我决定综合各家优点,结合自己的实际经验,为大家整理一篇详尽的教程。希望能帮助到有需要的朋友们。
让我们来谈谈codeigniter这款轻量、便捷的MVC框架。最近我接触到一个项目,需要实现批量上传功能。于是,我决定使用swfupload这个插件。在使用过程中遇到了一些问题,比如获取不到文件类型以及带有session验证的后台导致上传后退出登录的状况。
对于第一个问题,获取不到文件类型的问题,主要是因为SWFUPLOAD将所有文件的MIME类型都设置为application/octet-stream,这使得Codeigniter自带的上传类无法准确判断上传的文件是否为图片。针对这个问题,我们可以在视图文件中引入SWFUpload的javascript文件,并在控制器中使用“Filedata”作为do_upload函数的name值。在mimes.php文件中,为所有允许的图片格式添加'application/octet-stream'。
接下来,我们来看看带有session验证的后台导致上传后退出登录的状况。这个问题是因为swfuplaod在上传时会新开一个进程,这个进程和原来的进程不一致。为了解决这个问题,我们需要指定session_id,并在登录页面进行判断。如果post过来的session_id存在,就用函数session_id( $_POST['PHP_SESSIONID'])指定一下。在ci中的状态情况下,因为诸如uploadify,swfupload采用的都是flash客户端,会产生不同的useragent,导致上传程序开启时产生另一个session。为了防止丢失session或创建新的session,我们可以将$config['sess_match_useragent']设置成FALSE,或者采用其他验证方法,比如在每次上传时在url中附加一个token与服务器端的token进行比对。
使用codeigniter和swfupload进行文件上传时,可能会遇到一些问题,但只要掌握了正确的方法,就能轻松解决。希望这篇文章能帮助到大家,如果有其他疑问或需要进一步的解答,欢迎随时向我提问。在我个人的经验中,使用这种方法处理权限和上传验证时,需要特别注意一点:如果你的session类是在自动加载中加载的,那么按照这种方式进行继承可能会出现问题。我提出一种改进方案,创建一个新的控制器类MY_Controller,继承自CI_Controller。这个MY_Controller将专门用于后台登录和后台处理,同时包含必要的权限判断。我们将upload类继承自CI_Controller,这样可以避免通过session类的验证。尽管上传操作不需要再次进行session验证,但我们仍然可以通过post_params进行必要的验证。
让我们通过一个具体的代码示例来展示这一过程:
我们定义了一个Upload类,它继承自CI_Controller。这个类负责处理文件上传相关的操作。示例代码如下:
```php
class Upload extends CI_Controller {
// 这里的代码处理文件上传逻辑
}
```
接着,我们定义了一个client_photo类,它继承自我们刚刚创建的MY_Controller。这个类用于处理客户端照片相关的操作。示例代码如下:
```php
class client_photo extends MY_Controller {
public function __construct() {
parent::__construct();
}
public function index() {
// 这里是处理客户端照片的代码逻辑
}
}
```
我们定义了一个MY_Controller类,它继承自CI_Controller。在这个类中,我们加载了session库,并可以在此进行权限判断等后台处理操作。示例代码如下:
```php
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('session'); // 加载session库
// 在这里可以进行权限判断等后台处理操作
}
}
```
通过这样的设计,我们可以确保在保持原有功能的避免了session类自动加载带来的问题。这种设计也使得代码更加清晰、易于维护。在实际开发中,可以根据具体需求对各类进行进一步的扩展和优化。这样设计的程序结构清晰、易于理解,同时也方便了后续的维护和扩展。希望这个解决方案能够帮助你更好地处理权限和上传验证的问题。
编程语言
- 让codeigniter与swfupload整合的最佳解决方案
- jQuery实现点击水纹波动动画
- JSP中的FORM表单中只有一个input文本时,按回车键
- Vuex 使用 v-model 配合 state的方法
- 更改SQL Server更改当前数据库的所有者-sp_changedb
- 使用css实现全兼容tooltip提示框
- 详解JavaScript设计模式开发中的桥接模式使用
- ThinkPHP Where 条件中常用表达式示例(详解)
- DotNet OnPreRender(EventArgs e) 事件常用的方法
- 图文介绍报表与企业微信公众号集成方案
- Angular组件化管理实现方法分析
- 详解Vue前端生产环境发布配置实战篇
- MSSQL中删除用户时数据库主体在该数据库存中拥有
- thinkphp 框架数据库切换实现方法分析
- JavaScript requestAnimationFrame动画详解
- PHP实现从PostgreSQL数据库检索数据分页显示及根据