You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将input.files复制的文件数组添加到fetch POST请求的FormData中?

多文件上传FormData正确处理方式

你直接把fauxArray整个append到FormData的做法是错的——FormData会自动把数组转成字符串,所以服务器拿到的是[object File],[object File]这种无效内容。正确的做法是循环文件数组,逐个将File对象添加到FormData,并且要给字段名加上[]后缀,让PHP识别为数组。

修正后的JavaScript代码

const formData = new FormData();

// 循环文件数组,逐个添加
fauxArray.forEach(file => {
  formData.append('memoryPhotos[]', file);
});

formData.append('memoryTitle', packageTitle);
formData.append('memoryDescription', packageDescription);

fetch("gui/save.php", {
  method: "post",
  body: formData,
})

PHP端读取方式

注意:文件上传的内容不会出现在$_POST里,而是在$_FILES全局变量中。你可以这样处理:

// memoryPhotos是一个数组,包含所有上传的文件信息
$uploadedFiles = $_FILES['memoryPhotos'];

// 遍历处理每个文件
foreach ($uploadedFiles['tmp_name'] as $index => $tmpName) {
    $fileName = $uploadedFiles['name'][$index];
    $fileType = $uploadedFiles['type'][$index];
    $fileError = $uploadedFiles['error'][$index];
    $fileSize = $uploadedFiles['size'][$index];
    
    // 这里可以做文件校验、移动到服务器目录等操作
    if ($fileError === UPLOAD_ERR_OK) {
        move_uploaded_file($tmpName, 'uploads/' . $fileName);
    }
}

// 读取文本字段还是用$_POST
$title = $_POST['memoryTitle'];
$description = $_POST['memoryDescription'];

额外说明

你之前的图片预览逻辑是没问题的,只要fauxArray里存储的是原生的File对象,循环添加到FormData就可以正常上传。

内容的提问来源于stack exchange,提问作者Adam Rajnoha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 00:12:46