$this->upload->do_upload('Filedata')(SWFUpload 固定發送字段名)。application/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'),
Flash 請求的 User-Agent 與瀏覽器不同,CI sess_match_useragent = TRUE 導致判定為不同客戶端,創建新 Session。
| 方案 | 做法 | 安全性 | 推薦度 |
|---|---|---|---|
| 關閉 UA 檢查 | $config['sess_match_useragent'] = FALSE; | 降低,易受 Session 劫持 | ⭐ |
| Token 驗證(推薦) | 上傳 URL 攜帶 Token,後端驗證;上傳控制器**不加載 Session 庫** | 高,業務級驗證 | ⭐⭐⭐ |
// 1. 基礎控制器分離
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->load->library('session'); // 後台控制器繼承此類,自動驗證登錄
}
}
// 2. 上傳控制器直接繼承 CI_Controller,不經過 MY_Controller
class Upload extends CI_Controller {
public function do_upload() {
// 驗證 post_params 傳來的 token
$token = $this->input->post('token');
if (!$this->verify_token($token)) exit('Invalid token');
// 執行上傳邏輯...
}
}
// 3. 前端 SWFUpload 設置 post_params
var swfu = new SWFUpload({
// ...
post_params: { "token": "generate_upload_token(); ?>" },
upload_url: ""
});
MIME 問題通過配置修復;Session 丟失通過「上傳端點不加載 Session + Token 業務驗證」徹底解決,兼顧安全與體驗。