使用AJAX上传多个文件时没有上传文件

时间:2016-06-19 04:50:19

标签: javascript php jquery ajax multifile-uploader

我正在尝试上传多个只有1个AJAX请求的文件。但我面临一些问题,他们是:

更新

  • 没有文件上传到服务器
  • 在我看来,由于AJAX在for循环中,因此正在制作多个AJAX请求。

如何排序这些问题?

HTML

<!--<form id="fileupload" method="POST" enctype="multipart/form-data">-->
    <input type="file" multiple name="uploadfile[]" id="uploadfile" />
<!--</form>-->

JS

$("#uploadfile").change(function(){
     //submit the form here  
    //$('#fileupload').submit();
    var files = $("#uploadfile")[0].files;
    for (var i = 0; i < files.length; i++){
        //alert(files[i].name);
        var data = files[i].name;
        $.ajax({
            type:'POST',
            url: 'mupld.php',
            data: data
        });
    }

//var files = $('#uploadfile').prop("files"); //files will be a FileList object.
//alert(files);
//var names = $.map(files, function(val) { return val.name; }); //names is an array of strings (file names)

});

PHP

<?php
if(isset($_FILES['uploadfile'])){

    $errors= array();

    foreach($_FILES['uploadfile']['tmp_name'] as $key => $tmp_name ){
        $file_name = $key.$_FILES['uploadfile']['name'][$key];
        $file_size =$_FILES['uploadfile']['size'][$key];
        $file_tmp =$_FILES['uploadfile']['tmp_name'][$key];
        $file_type=$_FILES['uploadfile']['type'][$key]; 
        if($file_size > 2097152){
            $errors[]='File size must be less than 2 MB';
        }       

        //$query="INSERT into upload_data (`USER_ID`,`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`) VALUES('$user_id','$file_name','$file_size','$file_type'); ";

        $desired_dir="storage";

        if(empty($errors)==true){
            if(is_dir($desired_dir)==false){
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }

            if(is_dir("$desired_dir/".$file_name)==false){
                move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
            }
            else{                                   // rename the file if another one exist
                $new_dir="$desired_dir/".$file_name.time();
                 rename($file_tmp,$new_dir) ;               
            }
         //mysql_query($query);         
        }
        else{
                print_r($errors);
        }
    }
    if(empty($error)){
        echo "Success";
    }
}
?>

2 个答案:

答案 0 :(得分:0)

问题中的

js似乎无法上传File个对象,File.name位于var data = files[i].name;<!-- -->

中的javascript无效评论

尝试使用FormData()

$("#uploadfile").change(function() {
    var files = $("#fileupload")[0];
        $.ajax({
            type:"POST",
            url: "mupld.php",
            data: new FormData(files),
            processData: false,
            contentType: false
        });
});

答案 1 :(得分:0)

使用它

AJAX File Upload plugin

scanf( "%d", &Q );
    for ( i = 0; i < Q; ++i ) {
        scanf( "%*c%c%d%d", &c, &l, &r );