Php 使用AJAX-xhr上传文件

Php 使用AJAX-xhr上传文件,php,xmlhttprequest,Php,Xmlhttprequest,我试图用AJAX上传文件,但我的输出总是空的 那么代码中有什么错误或遗漏了什么?谢谢 HTML: <form id="data" method="post" enctype="multipart/form-data"> <input name="file" type="file" /> <input type="button" value="Upload" /> </form> <progress></progre

我试图用AJAX上传文件,但我的输出总是空的

那么代码中有什么错误或遗漏了什么?谢谢

HTML:

<form id="data" method="post" enctype="multipart/form-data">
    <input name="file" type="file" />
    <input type="button" value="Upload" />
</form>
<progress></progress>
$(":file").bind('change blur', function(e) {
    var file = this.files[0];
    name = file.name;
    size = file.size;
    type = file.type;
    console.log(name);
    console.log(size);
    /**
        OUTPUT:
            2-years-anniversaryv1.png jquery.form.img.js:10
            18407 
    */
    var formData = new FormData($(this)[0]);
    $.ajax({
        url: '/upload',
        type: 'POST',
        xhr: function() {
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload) {
                myXhr.upload.addEventListener('progress', progress, false); 
            }
            return myXhr;
        },
        success: function(result)
        {
            console.log($.ajaxSettings.xhr().upload);
            alert(result);
        },
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
});

function progress(e){
    if(e.lengthComputable){
        $('progress').attr({value:e.loaded,max:e.total});
    }
}
private function upload_file() {

   $this->getLog(print_r($_FILES,true));

   $returnData = array("file" => 'asd');

   echo json_encode($returnData);

}
Array
(
)

Array
(
)

Array
(
)
PHP:

<form id="data" method="post" enctype="multipart/form-data">
    <input name="file" type="file" />
    <input type="button" value="Upload" />
</form>
<progress></progress>
$(":file").bind('change blur', function(e) {
    var file = this.files[0];
    name = file.name;
    size = file.size;
    type = file.type;
    console.log(name);
    console.log(size);
    /**
        OUTPUT:
            2-years-anniversaryv1.png jquery.form.img.js:10
            18407 
    */
    var formData = new FormData($(this)[0]);
    $.ajax({
        url: '/upload',
        type: 'POST',
        xhr: function() {
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload) {
                myXhr.upload.addEventListener('progress', progress, false); 
            }
            return myXhr;
        },
        success: function(result)
        {
            console.log($.ajaxSettings.xhr().upload);
            alert(result);
        },
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
});

function progress(e){
    if(e.lengthComputable){
        $('progress').attr({value:e.loaded,max:e.total});
    }
}
private function upload_file() {

   $this->getLog(print_r($_FILES,true));

   $returnData = array("file" => 'asd');

   echo json_encode($returnData);

}
Array
(
)

Array
(
)

Array
(
)
getLog输出:

<form id="data" method="post" enctype="multipart/form-data">
    <input name="file" type="file" />
    <input type="button" value="Upload" />
</form>
<progress></progress>
$(":file").bind('change blur', function(e) {
    var file = this.files[0];
    name = file.name;
    size = file.size;
    type = file.type;
    console.log(name);
    console.log(size);
    /**
        OUTPUT:
            2-years-anniversaryv1.png jquery.form.img.js:10
            18407 
    */
    var formData = new FormData($(this)[0]);
    $.ajax({
        url: '/upload',
        type: 'POST',
        xhr: function() {
            myXhr = $.ajaxSettings.xhr();
            if(myXhr.upload) {
                myXhr.upload.addEventListener('progress', progress, false); 
            }
            return myXhr;
        },
        success: function(result)
        {
            console.log($.ajaxSettings.xhr().upload);
            alert(result);
        },
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    });
});

function progress(e){
    if(e.lengthComputable){
        $('progress').attr({value:e.loaded,max:e.total});
    }
}
private function upload_file() {

   $this->getLog(print_r($_FILES,true));

   $returnData = array("file" => 'asd');

   echo json_encode($returnData);

}
Array
(
)

Array
(
)

Array
(
)

如果通过AJAX上传,则需要使用
fopen()
访问文件内容:


那有点长。。。
复制有什么问题(“php://input“,“file\u name\u here”)
?嗯……我不太确定PHP输入流是否可以像文件一样复制。如果我没有先尝试,我不会建议它:p它工作得很好。