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

使用fetch()向服务器发送.zip文件时遇到问题

解决FormData上传文件后PHP端无法获取文件字段的问题

嘿,这个问题我之前踩过一模一样的坑!核心原因其实是PHP对FormData里的文件字段和普通文本字段的存储位置完全不同——你找错地方啦!

问题根源

当你通过FormData上传文件时,浏览器会自动把请求编码成multipart/form-data格式。在PHP的处理逻辑里:

  • 普通文本字段(比如你这里的id)会被存到$_POST超全局变量里
  • 文件类型的字段(比如你这里的data)不会出现在$_POST中,而是被单独存到$_FILES超全局变量里

你之前一直盯着$_POST找文件,自然找不到啦😅

正确的PHP处理代码

把你的reciever.php改成下面这样,就能正常拿到文件了:

<?php
// 处理普通文本字段(id)
if (isset($_POST['id'])) {
    $decodedId = base64_decode($_POST['id']);
    echo "解析后的ID:{$decodedId}<br>";
}

// 处理上传的文件(data字段)
if (isset($_FILES['data'])) {
    $file = $_FILES['data'];
    
    // 先检查文件上传是否出错
    if ($file['error'] === UPLOAD_ERR_OK) {
        // 示例:把文件移动到服务器的uploads目录(需要先创建这个目录并设置写入权限)
        $targetDir = './uploads/';
        if (!is_dir($targetDir)) {
            mkdir($targetDir, 0755, true);
        }
        $targetPath = $targetDir . basename($file['name']);
        
        if (move_uploaded_file($file['tmp_name'], $targetPath)) {
            echo "文件上传成功,路径:{$targetPath}";
        } else {
            echo "文件移动失败,请检查目录权限";
        }
    } else {
        echo "文件上传出错,错误码:{$file['error']}";
    }
} else {
    echo "未接收到上传的文件,请检查前端是否正确选择了文件";
}
?>

关于你的前端代码

你的前端代码其实完全没问题!不管用fetch还是XMLHttpRequest,只要像你那样正确构建FormData并发送,浏览器会自动处理multipart/form-data的请求头(包括自动添加关键的boundary分隔符),千万不要手动设置Content-Type,手动设置反而可能导致服务器解析错误。

额外检查点

  1. 确保前端的fileReciever是一个正确的<input type="file">元素,且用户确实选择了文件
  2. 服务器端的uploads目录要有写入权限(否则move_uploaded_file会执行失败)
  3. 如果上传的zip文件很大,需要检查PHP配置里的upload_max_filesize和post_max_size参数,确保值足够容纳你的文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:27:27