让codeigniter与swfupload整合的最佳解决方案

网络编程 2025-03-30 22:17www.168986.cn编程入门

网上关于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类自动加载带来的问题。这种设计也使得代码更加清晰、易于维护。在实际开发中,可以根据具体需求对各类进行进一步的扩展和优化。这样设计的程序结构清晰、易于理解,同时也方便了后续的维护和扩展。希望这个解决方案能够帮助你更好地处理权限和上传验证的问题。

上一篇:jQuery实现点击水纹波动动画 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by