實現無刷新圖片上傳是 Web 開發高頻需求。本文深度對比三種主流方案:jQuery ajaxfileupload 插件、iframe 傳統方案、原生 FormData (HTML5),含完整代碼、優缺點分析、選型建議。
原理:動態創建隱藏 iframe + form 提交,模擬異步效果
適用:需兼容 IE9 及以下、快速接入現有 jQuery 項目
'上傳失敗: ' . $_FILES['img']['error']));
exit;
}
// 移動文件
$filename = time() . '_' . basename($_FILES['img']['name']);
$dest = $upFilePath . $filename;
if (move_uploaded_file($_FILES['img']['tmp_name'], $dest)) {
echo json_encode(array('file_infor' => '上傳成功: ' . $filename));
} else {
echo json_encode(array('file_infor' => '文件移動失敗'));
}
原理:form target 指向隱藏 iframe,提交後 iframe 內執行腳本回調父頁面
parent.stopSend('{$name}')";
?>
優勢:原生 API、無依賴、支援進度條、二進制處理、多文件
兼容:IE10+、所有現代瀏覽器
HTML5 AJAX 上傳
瀏覽...
上傳
三方案深度對比
| 維度 | ajaxfileupload | iframe | FormData (HTML5) |
|---|---|---|---|
| 瀏覽器兼容 | IE6+ | 所有 | IE10+ |
| 依賴 | jQuery + 插件 | 無 | 無 |
| 進度條支援 | 無 | 無 | ✅ 原生支援 |
| 多文件上傳 | 需改造 | 需改造 | ✅ 原生支援 |
| 二進制/Blob處理 | ❌ | ❌ | ✅ |
| 代碼複雜度 | 低 | 中 | 中 |
| 調試難度 | 中(iframe黑盒) | 高 | 低(控制台可見) |
| 推薦指數 | ⭐⭐⭐ (舊項目) | ⭐⭐ (極致兼容) | ⭐⭐⭐⭐⭐ (新項目) |
upload_max_filesize + 前端預檢更多上傳技術:《PHP文件上傳安全指南》、《大文件分片上傳實戰》