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

多图片上传OCR识别生成Excel功能报错求助:上传时提示‘Uploaded data error’

问题排查与解决方法

首先,你遇到的「Uploaded data error」最直接的原因是upload.php里的循环变量$i未初始化就被使用,除此之外还有几处多文件上传适配的问题,我逐一给你拆解:

1. 核心错误:$i未定义导致的错误判断

在upload.php中,这段代码写在for循环外面:

if ($_FILES["uploadedFile"]['error'][$i] != 0) {
 echo "Uploaded data error";
 die;
}

但$i是循环内才会定义的变量,此时$i根本不存在,直接访问$_FILES["uploadedFile"]['error'][$i]会触发错误,直接输出「Uploaded data error」。

解决方法:把这段错误检查移到for循环内部,放在每个文件处理的开头:

for( $i=0 ; $i < $total ; $i++ ) {
    // 移到循环内,此时$i已定义
    if ($_FILES["uploadedFile"]['error'][$i] != 0) {
        echo "Uploaded data error for file " . $_FILES["uploadedFile"]["name"][$i];
        continue; // 跳过当前错误文件,继续处理其他文件
    }
    // 后续的文件检查逻辑...
}

2. 多文件上传的路径覆盖问题

原来的$target_file是在循环外定义的,所有文件都会被保存成同一个文件名,导致后面的文件直接覆盖前面的。而且imageFileType也是循环外获取,只能拿到第一个文件的扩展名。

解决方法:在循环内单独处理每个文件的路径和扩展名:

for( $i=0 ; $i < $total ; $i++ ) {
    // ...前面的错误检查...
    
    // 单独获取当前文件的扩展名
    $currentFileName = $_FILES["uploadedFile"]["name"][$i];
    $imageFileType = pathinfo($currentFileName, PATHINFO_EXTENSION);
    
    // 生成唯一的目标文件名,避免覆盖
    $target_file = $target_dir . uniqid() . "." . $imageFileType;
    
    // 后续的文件大小、类型检查...
}

3. 表单提交判断失效问题

upload.php里的if(isset($_POST["submit"]))判断会失效——你的前端表单通过onsubmit="event.preventDefault(); return myFunction();"阻止了默认提交,而且按钮逻辑没有传递submit字段,导致文件类型检查(getimagesize)完全不会执行。

解决方法:去掉这个判断,直接执行文件类型检查:

// 去掉if(isset($_POST["submit"]))包裹
$check = getimagesize($_FILES["uploadedFile"]["tmp_name"][$i]);
if($check !== false) {
    // 文件是图片,正常处理
} else {
    echo "File " . $currentFileName . " is not an image.";
    $allowUpload = false;
}

4. prepare.js的多文件适配问题

你的prepare.js原本只支持单文件,现在需要修改start函数来遍历所有上传的文件,收集所有识别结果后再统一处理:

async function start(filenames) {
    // 收集所有文件的识别结果
    const allResults = [];
    for (const fileName of filenames) {
        const { data: { text } } = await readFile(fileName);
        const data = await parseDataFromTextAndPropertyNames(text, ['نقطة الخدمة', 'رقم العداد', 'القراءة']);
        allResults.push(data);
    }

    // 渲染所有结果到表格
    constructTable('#table', allResults);
    let htmlstring = document.getElementById("table").innerHTML;
    
    // 提交到change.php生成Excel
    $.post('change.php', {htmlstring:htmlstring}).done(function(response){
        alert(response);
    });
}

额外注意事项

  • 确保uploads/目录存在且有写入权限,否则move_uploaded_file会失败。
  • 多文件上传时,建议在前端也做一次文件数量、大小、类型的校验,减少后端压力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:07:47