CI + SWFUpload 批量上傳常見兩大坑及解決方案:
SWFUpload 所有文件 MIME 均為 application/octet-stream,導致 CI 上傳類驗證失效。
解決:在 config/mimes.php 為允許的圖片格式追加 application/octet-stream:
'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'),
'png' => array('image/png', 'image/x-png', 'application/octet-stream'),
控制器調用 $this->upload->do_upload('Filedata')(SWFUpload 默認字段名)。
Flash 觸發請求 User-Agent 不同,CI 開啟 sess_match_useragent 時會創建新 Session。
方案一(簡易):$config['sess_match_useragent'] = FALSE;(降低安全性)
方案二(推薦):分離上傳控制器繼承關係,避開 Session 自動加載:
class Upload extends CI_Controller { ... } // 不自動加載 session
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('session'); // 只有後台控制器繼承此類才加載
}
}
class Admin_Controller extends MY_Controller { ... } // 後台頁面用此
上傳驗證改用 post_params 傳 Token 比對(如用戶名 Hash)。