【发布时间】:2021-05-02 06:28:42
【问题描述】:
抱歉,我的第一篇文章不符合网站的标准
我重播我的问题
我正在尝试使用 JavaScript 和 php 上传包含 200 多个文件的文件夹。问题是它只是上传了 21 个文件并在显示问题后停止:未定义索引 21。
我的 html 文件:home.html
<form method="POST" id="upload_folder_form">
<div class="row">
<input class="action" type="hidden" name="action" value="upload">
<input class="parent_id" type="hidden" name="parent_id" value="0">
<div class="form-group">
<label for="nom">Folder</label>
<input id="files[]" type="file" name="files[]" class="form-control" webkitdirectory multiple>
</div>
<div class="form-group">
<div class="col-lg-12">
<button type="submit" class="btn color-cmc pull-right" name="btn_envoi">
<i class="fa fa-upload"></i> Import
</button>
<button type="button" class="btn btn-default pull-right" data-dismiss="modal">Annuler</button>
</div>
</div>
</div>
</form>
我的 Javascripy 文件:Folder.js
$('#upload_folder_form').submit(function (e) {
e.preventDefault();
//récuperation des variables
let form = $('#upload_folder_form');
let action = $('.action').val();
let parent_id = $('.parent_id').val();
let redirect = "http://localhost/archivia/app/controllers/FolderController.php";
const files = document.querySelector('[type=file]').files;
let size = files.length;
const formData = new FormData();
formData.append('action', action);
formData.append('parent_id', parent_id);
formData.append('size', size);
for (let i = 0; i < files.length; i++) {
let file = files[i];
let fileParamName = `file${i}`;
let filePathParamName = `filepath${i}`;
formData.append(fileParamName, file);
formData.append(filePathParamName, file.webkitRelativePath);
}
axios.post(redirect, formData).then(function (result) {
console.log(result.data);
});
return false;
});
我的 PHP 文件:FolderController.php
function upload(){
$path = "../../public/Archives CMC/";
$size = $_POST['size'];
var_dump($_FILES);
for($i = 0; $i < $size; $i++){
$folderpath = $path.dirname($_POST['filepath'.$i]);
$file = $_FILES['file'.$i];
$filename = $file['name'];
$file_tmp = $file["tmp_name"];
if (file_exists($path.$folderpath)){
move_uploaded_file($file_tmp, $path.$folderpath.'/'.$filename);
}else{
mkdir($path.$folderpath,0644,true);
move_uploaded_file($file_tmp, $path.$folderpath.'/'.$filename);
}
}
}
对于超过 30 个文件的文件夹,仅上传 20 个
请问我该怎么办???
谢谢
【问题讨论】:
-
“我很抱歉,因为我的第一篇文章不符合网站的标准” - 下次,请编辑您现有的版本然后提出问题,而不是创建一个新问题。
-
那么
var_dump($_FILES);显示了什么,实际上print_r($_FILES);可能更容易阅读 -
您是否阅读过有关 webkitdirectory 的警告 非标准 此功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不适用于每个用户。实现之间也可能存在很大的不兼容性,并且行为可能会在未来发生变化
-
@RiggsFolly 让我给你看图片
-
也许你应该读一下@CBroe 的答案。似乎是最明显的原因
标签: javascript php ajax