多次文件上传只添加一个文件

Multiple file upload adds only one file

本文关键字:文件 一个 添加      更新时间:2023-09-26

我试图用php达到多个文件/图像上传,但我得到的只是我的上传文件夹中的一个文件,表单是由ajax发送的。这是我的代码:

<input type='file' id='_file' multiple="multiple" name="SelectedFile[]"> 
<input type='button' id='_submit' value='Upload!'>
PHP

<?php
// Output JSON
function outputJSON($msg, $status = 'error'){
    header('Content-Type: application/json');
    die(json_encode(array(
        'data' => $msg,
        'status' => $status
    )));
}
$count = 0;
...
// Success!
foreach ($_FILES['SelectedFile']['name'] as $f => $name) {
    outputJSON('File uploaded successfully to "' . 'upload/' . $_FILES['SelectedFile']['name'][0] . '".', 'success');
    $count ++;
}

JS

    var data = new FormData();
    data.append('SelectedFile', _file.files[0]);
    var request = new XMLHttpRequest();
    request.onreadystatechange = function(){
        if (request.readyState == 4){
            try {
                var resp = JSON.parse(request.response);
            } catch (e){
                var resp = {
                    status: 'error',
                    data: 'Unknown error occurred: [' + request.responseText + ']'
                };
            }
            console.log(resp.status + ': ' + resp.data);
        }
    };
    request.upload.addEventListener('progress', function(e){
        _progress.style.width = Math.ceil(e.loaded/e.total) * 100 + '%';
    }, false);
    request.open('POST', 'upload.php');
    request.send(data);

我还有Unknown error occurred: []

outputJSON函数中删除die调用并使用echo代替,它在foreach的第一个循环中终止脚本。

更新:

假设文件被正确上传并存储在$_FILES数组中,该代码输出应该可以被js解析:

header('Content-Type: application/json');
$output = array();
foreach ($_FILES['SelectedFile'] as $f => $file) {
    $output []= array(
       'data' => 'File uploaded successfully to "' . 'upload/' . $file['name'],
       'status' => 'success',
    );
}
echo json_encode($output);