问题是,除了我实际上尝试上传文件并单击提交按钮时,所有内容似乎都正常运行,我认为文件已得到处理,但是php由于某些原因无法处理它(我不是真的)对php非常了解,这取自在线教程,所以我不确定我要去哪里出错。文件数组未发送到php文件。
HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Upload Files</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="files[]" multiple>
<input type="submit" value="Upload File" name="submit">
</form>
<script src="upload.js"></script>
</body>
</html>
JavaScript代码:
const url = 'process.php';
const form = document.querySelector('form');
form.addEventListener('submit', e => {
e.preventDefault();
const files = document.querySelector('[type=file]').files;
const formData = new FormData();
for (let i = 0; i < files.length; i++) {
let file = files[i];
formData.append('files[]', file);
}
fetch(url, {
method: 'POST',
body: formData
}).then(response => {
console.log(response);
});
});
php代码:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['files'])) {
$errors = [];
$path = 'uploads/';
$extensions = ['m4a', 'mp3', 'mkv', 'mp4', 'wav', 'flac', 'alac', 'aiff', 'avi'];
$all_files = count($_FILES['files']['tmp_name']);
print_r('hi');
for ($i = 0; $i < $all_files; $i++) {
$file_name = $_FILES['files']['name'][$i];
$file_tmp = $_FILES['files']['tmp_name'][$i];
$file_type = $_FILES['files']['type'][$i];
$file_size = $_FILES['files']['size'][$i];
$file_ext = strtolower(end(explode('.', $_FILES['files']['name'][$i])));
$file = $path . $file_name;
if (!in_array($file_ext, $extensions)) {
$errors[] = 'Extension not allowed: ' . $file_name . ' ' . $file_type;
}
if ($file_size > 50000000) {
$errors[] = 'File size exceeds limit: ' . $file_name . ' ' . $file_type;
}
if (empty($errors)) {
move_uploaded_file($file_tmp, $file);
}
}
if ($errors) print_r($errors);
}
}
在php代码中,如果我尝试在“ if(is(isset($ _ FILES ['files']))””循环中使用一条打印语句,则它永远不会输出任何内容,因此永远不会输入该循环,这意味着文件确实即使我尝试用Javascript代码控制台记录文件数组,也无法通过,但它会正确显示在我的开发人员工具中。