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

Form Data上传图片报错:Undefined array key 'photo' 求助

解决Form Data上传图片时"Undefined array key 'photo'"问题

出现这个错误的核心原因有三个,逐个修复就能解决:

1. FormData未添加合法的File对象

你直接给FormData append了一个自定义对象,浏览器无法将其识别为文件,服务器自然接收不到photo字段。浏览器环境下必须通过用户选择的File对象(或Blob)来构建表单文件字段。

2. 手动设置Content-Type: multipart/form-data会破坏表单解析

当用fetch提交FormData时,浏览器会自动生成包含boundary的Content-Type头(比如multipart/form-data; boundary=----WebKitFormBoundaryxxxx),手动设置会丢失这个关键的boundary,导致服务器无法正确解析表单数据。

3. 浏览器无法直接读取本地文件路径

出于安全限制,浏览器不能直接通过C:\Users\mea\Downloads\testimg.jpeg这种本地路径读取文件,必须通过文件选择器让用户主动选择文件。


修改后的完整代码:

index.html

<html>
<head>
 <script type="text/javascript" src="index.js"></script>
</head>
<body>
  <!-- 添加文件选择控件 -->
  <input type="file" id="imageInput" accept="image/*" />
  <button onclick="uploadImage()">Upload an Image</button>
</body>
</html>

index.js

async function uploadImage(){
    // 获取用户选择的文件
    const fileInput = document.getElementById('imageInput');
    const file = fileInput.files[0];
    if (!file) {
        alert('请先选择图片');
        return;
    }

    const data = new FormData();
    // 直接append选中的File对象
    data.append('photo', file);

    return await fetch('upload_image.php', {
        method: 'POST',
        body: data
        // 不要手动设置Content-Type,浏览器会自动处理
    });
}

upload_image.php

<?php
header('Access-Control-Allow-Origin: *');
// 先检查photo字段是否存在,避免报错
if (!isset($_FILES['photo'])) {
    echo json_encode(array('message' => '未接收到上传文件'));
    exit;
}

$target_dir = "../../images";
// 确保目标目录存在,否则创建
if (!is_dir($target_dir)) {
    mkdir($target_dir, 0755, true);
}

$target_file = $target_dir . '/' . basename($_FILES['photo']['name']);

if(move_uploaded_file($_FILES['photo']['tmp_name'], $target_file)) {
    echo json_encode(array('message' => 'Image uploaded Successfully'));
} else {
    echo json_encode(array('message' => 'Upload failed!'));
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:22:32