使用JavaScript将文件夹上载到服务器
我很抱歉,因为我的第一篇文章没有达到网站的标准 我重播我的问题 我正试图用JavaScript和php上传一个包含200多个文件的文件夹。问题是它只是上传了21个文件,然后停止,显示问题:未定义的索引21 我的html文件:home.html使用JavaScript将文件夹上载到服务器,javascript,php,ajax,Javascript,Php,Ajax,我很抱歉,因为我的第一篇文章没有达到网站的标准 我重播我的问题 我正试图用JavaScript和php上传一个包含200多个文件的文件夹。问题是它只是上传了21个文件,然后停止,显示问题:未定义的索引21 我的html文件:home.html <form method="POST" id="upload_folder_form"> <div class="row"> <input cl
<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;
});
$('upload#u folder_form')。提交(函数(e){
e、 预防默认值();
//récédes变量
let form=$(“#上传#u文件夹_form”);
let action=$('.action').val();
让parent_id=$('.parent_id').val();
让重定向=”http://localhost/archivia/app/controllers/FolderController.php";
const files=document.querySelector('[type=file]').files;
设size=files.length;
const formData=new formData();
formData.append('action',action);
formData.append('parent\u id',parent\u id);
formData.append('size',size);
for(设i=0;i
我的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);
}
}
}
函数上传(){
$path=“../public/Archives CMC/”;
$size=$_POST['size'];
变量转储($\u文件);
对于($i=0;$i<$size;$i++){
$folderpath=$path.dirname($\u POST['filepath'.$i]);
$file=$\u文件['file'.$i];
$filename=$file['name'];
$file_tmp=$file[“tmp_name”];
如果(文件_存在($path.$folderpath)){
移动上传的文件($file\u tmp,$path.$folderpath.'/'.$filename);
}否则{
mkdir($path.$folderpath,0644,true);
移动上传的文件($file\u tmp,$path.$folderpath.'/'.$filename);
}
}
}
对于包含30多个文件的文件夹,将只上载20个文件
我怎么能过来呢
谢谢,PHP有一个配置设置,它限制了在这种POST请求中可以接受多少文件上传 它名为
max\u file\u uploads
,默认值为20
请注意,“可变模式”显示为PHP_INI_SYSTEM,这意味着只能在PHP.INI或httpd.conf中设置。因此,如果您无法控制服务器,您必须询问您的服务器管理员/主机提供商,他们是否可以为您更改此设置
文件上传工作原理说明的子章节中也提到了这一点
从PHP 5.2.12开始,max_file_uploads配置设置控制一个请求中可以上载的最大文件数如果上载的文件数量超过限制,则一旦达到限制,$\u文件将停止处理文件。例如,如果将max\u file\u uploads设置为10,则$\u文件将永远不会包含超过10个项目
在这个领域中,有许多PHP参数大致共同作用
// the max number of file that PHP will accept from upload
// as it cannot know how many the browser is sending until it gets them
// php just Stops processing at this number of files
max_file_uploads = 20
// the max size of any one file that will be accepted
upload_max_filesize = 2M
// as files are transmitted using POST, this param should also be checked
// it should be large enough to cope with all the files uploaded
// So basic calc, assuming all files wont be the max size would be
// post_max_size = max_file_uploads * upload_max_filesize
//
// However you also have to make room for all the normal html form parameters
// that may come as well as the file(s)
//
// so
// post_max_size = max_file_uploads * upload_max_filesize + 8M as a guestimate
post_max_size = 8M
// of course as all this will occupy memory in PHP while it processes all the
// files and other field inputs it should be large enough to cope with
// all the file and of course some room for the program code
memory_limit = 128M
忽略这些参数中的数字,它们只是占位符,不是我对您的系统的建议,您必须自己解决这些问题
在使用WAMPServer时,您可以在php.ini
文件中修改所有这些参数。但是,如果您打算最终将此代码移动到共享主机,则可能无法访问这些参数。因此,在设计具有大量需求的系统时要小心,这可能会迫使您在代码的最终归宿上花费更多
最后,当您在php.ini
文件中更改这些参数时,请记住跳出Apache,以便获取新值
“我很抱歉,因为我的第一篇文章不符合网站的标准”-下次,请编辑你已经存在的问题版本,而不是创建一个新的版本代码>显示,实际上是一个
打印文件($\u文件)代码>可能更容易阅读您是否阅读了关于webkitdirectory非标准的警告此功能是非标准的,不在标准轨道上。不要在面向Web的生产站点上使用它:它不会适用于所有用户。实现之间也可能存在很大的不兼容性,并且行为可能会发生变化future@RiggsFolly让我用图片给你看,也许你应该读一下@CBroe答案。似乎是最明显的原因非常感谢
wampmanager->Apache->Service Administration->Restart Service