本文详解如何在不依赖 `
在前端文件上传场景中,许多开发者尝试绕过
根本原因在于:FormData.append() 不支持直接传入 FileList 对象。它仅接受单个 File 或 Blob 实例。input.files 返回的是只读的 FileList 类数组对象,需显式遍历其中每个 File 项,逐个追加:
for (let i = 0; i < forminput[0].files.length; i++) { form_data.append('images[]', forminput[0].files[i]); }
此外,还需确保 Ajax 配置正确:
完整修正后的 javaScript 代码如下:
$('.formimgaj').each(function() { const fileInput = $( ".form-control-file", this )[0]; // 获取原生 DOM 元素 $(this).find(".butt_img_upload").on('click', function(e) { e.preventDefault(); if (!fileInput.files || fileInput.files.length === 0) { console.warn('未选择任何文件'); return; } const formData = new FormData(); // ✅ 关键:遍历 FileList,逐个 append 单个 File for (let i = 0; i < fileInput.files.length; i++) { formData.append('images[]', fileInput.files[i]); } formData.append('type', 'updateimg'); $.ajax({ type: 'POST', url: 'php/update.php', data: formData, processData: false, contentType: false, cache: false, success: function(response) { console.log('上传成功:', response); }, error: function(xhr, status, err) { console.error('上传失败:', status, err); } }); }); });
⚠️ 注意事项:
foreach ($_FILES['images']['tmp_name'] as $key => $tmp_name) { if (is_uploaded_file($tmp_name)) { move_uploaded_file($tmp_name, "uploads/{$_FILES['images']['name'][$key]}"); } }
掌握 FileList 的遍历本质与 FormData 的接口约束,是实现无表单 Ajax 文件上传的关键一步。
币安官网最新地址2026发布 币安交易所官方正版App v9.1.0下载
PHP怎样获取栏目附件列表_PHP取栏目附件法【文件】