上一篇
"这破功能怎么又报错了?!" 小张猛拍了下键盘,盯着屏幕上那个刺眼的红色错误提示,周五下午5点30分,距离下班还有半小时,这个简单的文件上传功能已经折磨他整整两天了。😫
明明用ajax提交普通表单数据都好好的,怎么一换成文件上传就各种报错?小张抓了抓已经乱成鸟窝的头发,决定彻底搞明白这个ajax文件上传的坑...
Content-Type的误会 ❌
application/x-www-form-urlencoded
multipart/form-data
数据格式不兼容 📦
FormData才是正解 💡
// ❌ 错误示范 - 直接传文件 $.ajax({ url: 'upload.php', data: { file: $('#fileInput')[0].files[0] }, // 这里会报错! type: 'POST' });
// ✅ 正确姿势 let formData = new FormData(); formData.append('file', $('#fileInput')[0].files[0]); formData.append('username', '张三'); // 可以混合其他字段 $.ajax({ url: 'upload.php', data: formData, type: 'POST', processData: false, // 必须! contentType: false, // 必须! success: function(response) { console.log('上传成功啦~', response); } });
processData: false
:告诉jQuery不要处理数据contentType: false
:让浏览器自动设置正确的Content-Typecache: false
:防止某些浏览器缓存请求当项目需要兼容老旧浏览器时,ajaxFileUpload是个不错的选择。
// 引入插件后 $.ajaxFileUpload({ url: 'upload.php', secureuri: false, fileElementId: 'fileInput', // 文件input的id dataType: 'json', success: function(data) { alert('上传成功!服务器返回: ' + data.message); }, error: function(data) { alert('啊哦,出错了: ' + data.responseText); } });
<pre>
标签,需要后端配合当文件特别大时(比如视频),可以考虑分片上传:
// 分片上传示例 function uploadChunk(file, start, chunkSize) { let chunk = file.slice(start, start + chunkSize); let formData = new FormData(); formData.append('chunk', chunk); formData.append('name', file.name); formData.append('totalSize', file.size); return $.ajax({ url: 'upload_chunk.php', data: formData, type: 'POST', processData: false, contentType: false }); }
// upload.php if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { $tempPath = $_FILES['file']['tmp_name']; $uploadPath = 'uploads/' . basename($_FILES['file']['name']); if (move_uploaded_file($tempPath, $uploadPath)) { echo json_encode(['status' => 'success', 'path' => $uploadPath]); } else { echo json_encode(['status' => 'error', 'message' => '移动文件失败']); } } else { echo json_encode(['status' => 'error', 'message' => '上传错误']); }
"原来如此!" 小张终于露出了笑容,手指在键盘上飞舞,6点整,随着最后一段代码的完成,文件上传功能终于完美运行,他伸了个懒腰,心想:"下次遇到问题一定要先搞清楚原理,而不是盲目试错啊!" 🌈
(本文技术要点更新至2025年8月)
本文由 谭依美 于2025-08-01发表在【云服务器提供商】,文中图片由(谭依美)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://up.7tqx.com/wenda/505739.html
发表评论