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

如何批量上传文件夹图片至服务器?服务端接收数组为空问题求助

文件夹图片上传后端接收为空的问题解决

问题现象

使用带directory属性的文件选择框上传文件夹内所有图片,前端通过FormData提交后,后端PHP的$_FILES['flist']为空,报错Undefined array key "flist",无法完成图片保存。

错误原因

  1. 前端FormData处理错误:直接将FileList对象整体append到FormData中,PHP无法识别。需要逐个添加文件,并且键名要加[]后缀,让PHP解析为数组。
  2. 前端Ajax配置冲突:重复设置了contentType: 'multipart/form-data'和contentType: false,后者才是正确的(让浏览器自动设置multipart头)。
  3. 后端遍历逻辑错误:PHP接收多文件时,$_FILES['flist']的结构是每个属性(如name、tmp_name)为数组,而非每个元素是单个文件的完整信息数组。

修正后的代码

前端HTML(无需修改)

<input type='file' class='inpfile' id='inpfo' webkitdirectory='' directory='' multiple='true'>

前端JS

var inpfo = $('#inpfo');

inpfo.on('change', function(){
    var flist = inpfo[0].files;
    var fd = new FormData();
    // 逐个添加文件到FormData,键名加[]让PHP识别为数组
    for(var i = 0; i < flist.length; i++){
        fd.append('flist[]', flist[i]);
    }
    $.ajax({
        url: 'upload.php',
        type: 'POST',
        data: fd,
        async: false,
        success: function (data){
            console.log(data);
        },
        cache: false,
        contentType: false, // 仅保留此配置,让浏览器自动处理multipart头
        processData: false
    });
});

后端upload.php

// 先判断是否接收到有效文件
if(isset($_FILES['flist']) && !empty($_FILES['flist']['tmp_name'][0])){
    $files = $_FILES['flist'];
    // 按索引遍历每个文件
    for($i = 0; $i < count($files['tmp_name']); $i++){
        $tempname = $files['tmp_name'][$i];
        $fileType = $files['type'][$i];
        // 仅处理jpg/jpeg格式的图片
        if(in_array($fileType, ['image/jpeg', 'image/jpg'])){
            // 验证是否为合法上传文件
            if(is_uploaded_file($tempname)){
                $uniq = uniqid();
                $targ = 'test/' . $uniq . '.jpg';
                $img = imagecreatefromjpeg($tempname);
                if($img){
                    imagejpeg($img, $targ);
                    imagedestroy($img); // 释放图片资源
                }
            }
        }
    }
    echo '上传成功';
}else{
    echo '未接收到有效文件';
}

额外注意事项

  • 确保服务器端test目录存在且拥有写入权限(可通过chmod 755 test命令设置)。
  • 建议将async: false改为async: true,避免阻塞浏览器影响用户体验。
  • 可根据需求添加文件大小限制、支持更多图片格式(如png)等逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:51:11