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

HTML文件输入实现多文件上传时PHP报错问题排查

多文件上传报错「Uploaded data error」解决方案

问题背景

单文件上传功能正常,给input的name属性添加[]并开启multiple切换为多文件上传后,后端PHP返回「Uploaded data error」错误。

核心错误原因

多文件上传时,PHP的$_FILES会变成二维数组结构:每个文件的name、tmp_name、error等属性都是数组形式。而原有代码仍按单文件的一维数组逻辑处理,比如直接判断$_FILES["uploadedFile"]['error'] != 0——此时error是一个数组,和0直接比较会导致逻辑错误,触发报错。

修正后的代码实现

后端upload.php(关键修改)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<?php
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo "请选择文件后再提交";
    die;
}

// 验证多文件上传的数组结构
if (!isset($_FILES["uploadedFile"]) || !is_array($_FILES["uploadedFile"]['name'])) {
    echo "数据结构错误";
    die;
}

$target_dir    = "uploads/";
$maxfilesize   = 80000000;
$allowtypes    = array('jpg', 'png', 'jpeg', 'gif');
$uploadResults = [];

// 循环处理每个上传文件
$totalFiles = count($_FILES['uploadedFile']['name']);
for ($i = 0; $i < $totalFiles; $i++) {
    $allowUpload = true;
    $currentFileName = basename($_FILES["uploadedFile"]["name"][$i]);
    $currentFileError = $_FILES["uploadedFile"]['error'][$i];

    // 跳过上传出错的文件
    if ($currentFileError !== 0) {
        $uploadResults[] = "文件「$currentFileName」上传错误,错误码:$currentFileError";
        continue;
    }

    $target_file = $target_dir . $currentFileName;
    $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));

    // 图片验证(按需保留)
    if (isset($_POST["submit"])) {
        $check = getimagesize($_FILES["uploadedFile"]["tmp_name"][$i]);
        if ($check === false) {
            $uploadResults[] = "文件「$currentFileName」不是有效的图片文件";
            $allowUpload = false;
        }
    }

    // 文件存在校验
    if (file_exists($target_file)) {
        require "other/fileExsist.php";
        $uploadResults[] = "文件「$currentFileName」已存在";
        $allowUpload = false;
    }

    // 文件大小校验
    if ($_FILES["uploadedFile"]["size"][$i] > $maxfilesize) {
        require "other/fileSize.php";
        $uploadResults[] = "文件「$currentFileName」超出大小限制";
        $allowUpload = false;
    }

    // 文件类型校验
    if (!in_array($imageFileType, $allowtypes)) {
        require "other/fileExtenstion.php";
        $uploadResults[] = "文件「$currentFileName」格式不支持,仅允许jpg/png/jpeg/gif";
        $allowUpload = false;
    }

    // 执行上传操作
    if ($allowUpload) {
        if (move_uploaded_file($_FILES["uploadedFile"]["tmp_name"][$i], $target_file)) {
            $uploadResults[] = "文件「$currentFileName」上传成功";
            // 成功后可调用prepare.php处理后续逻辑
            // require "prepare.php";
        } else {
            $uploadResults[] = "文件「$currentFileName」上传失败";
        }
    }
}

// 输出所有上传结果
foreach ($uploadResults as $result) {
    echo $result . "<br>";
}
?>

额外注意事项

  • 路径分隔符:PHP中统一使用正斜杠/,避免Windows反斜杠\带来的转义问题(比如require "other/fileExsist.php")。
  • 前端代码:HTML和JavaScript部分无需修改,当前逻辑可正常触发多文件上传。
  • 错误处理:新增了循环遍历每个文件的错误处理,能清晰反馈每个文件的上传状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:05:31