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

为何PHP脚本中HTML表单的图片会被重复上传?

解决多图重复上传问题

可能的原因及对应修复方案

1. 表单提交事件重复绑定

如果你的JS代码被执行了多次(比如放在动态加载内容里、重复引入JS文件),会导致submit事件被绑定多份,一次表单提交会触发多轮AJAX请求,最终每张图片被上传多次。

修复代码:
先解绑原有事件再绑定,避免重复触发:

$("#product_form").off('submit').submit(function(e) {
    e.preventDefault();
    $.ajax({
        url: 'assets/php/process.php',
        method: 'post',
        processData: false,
        contentType: false,
        cache: false,
        data: new FormData(this),
        success: function(response) {
            console.log(response);
        }
    });
});

2. 用户重复点击提交按钮

如果用户在请求完成前多次点击提交按钮,也会导致重复上传。可以在请求期间禁用提交按钮:

$("#product_form").submit(function(e) {
    e.preventDefault();
    // 获取提交按钮并禁用
    const submitBtn = $(this).find('button[type="submit"]');
    submitBtn.prop('disabled', true);
    
    $.ajax({
        url: 'assets/php/process.php',
        method: 'post',
        processData: false,
        contentType: false,
        cache: false,
        data: new FormData(this),
        success: function(response) {
            console.log(response);
        },
        // 请求完成(无论成功失败)恢复按钮
        complete: function() {
            submitBtn.prop('disabled', false);
        }
    });
});

3. PHP代码未过滤无效上传项

有时候会存在空的上传记录(比如用户未选中文件时的空项),或者重复的临时文件路径,需要在PHP中增加校验:

$file_array = $_FILES['image'];
$file_count = count($file_array['name']);

// 循环处理上传文件
for($i=0;$i<$file_count;$i++){
    $file_name = $file_array['name'][$i];
    $file_tmp = $file_array['tmp_name'][$i];
    $file_type = $file_array['type'][$i];

    // 跳过无效的上传项(临时文件不存在或不是通过HTTP POST上传的)
    if(empty($file_tmp) || !is_uploaded_file($file_tmp)){
        continue;
    }

    // 获取文件扩展名
    $file_ext = pathinfo($file_name, PATHINFO_EXTENSION);

    // 生成唯一文件名
    $new_file_name = uniqid().'.'.$file_ext;

    // 移动文件并判断是否成功
    if(move_uploaded_file($file_tmp, 'uploads/'.$new_file_name)){
        echo "文件 ".$file_name." 已重命名为 ".$new_file_name." 并上传至服务器。<br>";
    } else {
        echo "文件 ".$file_name." 上传失败。<br>";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:12:46