使用 FormData 的 javascript 文件上传问题,收到空的 $_FILES

标签 javascript php jquery html ajax

我使用 JavaScript 创建了一个简单的文件上传到我的服务器。 它有效,但对于一些 jpeg/png 文件,我收到空的 $_FILES$_POST 变量。 我尝试了很多方法,但没有找到解决方案。

我的 HTML 是这样的:

<input type="file" name="fileUpload" id="fileUpload" multiple="true" onchange="upload(this.files,0);">

JS函数:

    upload = function(files,aid){
    $.each(files,function(i,file){
        if(file.type.match(/image.jpeg/) || file.type.match(/image.png/) ){
            if(file.size < 10*1024*1024){
            var intreval = setInterval(function(){
                    if(xhrCheck == false){
                        xhrCheck = true;
                        var formData = new FormData();
                        formData.append("file",file);
                        formData.append("aid",aid);
                        function success(data){console.log("success!");};

                        setTimeout(function(){
                            $.ajax({
                                xhr: function() {
                                    var xhr = new window.XMLHttpRequest();
                                    xhr.upload.addEventListener("progress", function(evt) {
                                        if (evt.lengthComputable) {
                                            var percentComplete = evt.loaded / evt.total;
                                            percentComplete = parseInt(percentComplete * 100);
                                            console.log(percentComplete);
                                            if (percentComplete === 100) {
                                                xhrCheck = false;
                                                clearInterval(intreval);
                                            }

                                        }
                                    }, false);

                                    return xhr;
                                },
                                type : "POST",
                                url : "/photo_uploader.php",
                                data : formData,
                                dataType : "JSON",
                                cache: false,
                                contentType: false,
                                processData: false,
                                success : success,
                            })

                        },1000);
                    }
                },1);
            }
            else {
                alert("more than 10mb!");
            }
        }
        else {
            alert("only JPEG or PNG allowed!");
        }
    });
};

在 PHP 中,我只是简单地显示 $_POST$_FILES 变量,如下所示:

pinrt_r($_FILES);
print_r($_POST);

在正常情况下,a 会收到这样的东西:

Array
(
    [file] => Array
        (
            [name] => _DSC0004.jpg
            [type] => image/jpeg
            [tmp_name] => /tmp/phppUJNS5
            [error] => 0
            [size] => 5185226
        )

)
Array
(
    [aid] => 0
)

但是当我选择其他一些照片(不是全部!)时,我收到了这个:

Array
(
)
Array
(
)

但是如果我修改这张图片(比如调整大小),它通常会上传到服务器。

我尝试使用 XMLHttpRequest 并将 Ajax 请求替换为此:

var xmlRq = new XMLHttpRequest(); 
xmlRq.upload.addEventListener("progress", function(evt) {
    if (evt.lengthComputable) {
        var percentComplete = evt.loaded / evt.total; percentComplete = parseInt(percentComplete * 100);
        console.log(percentComplete);
          if (percentComplete === 100) {
                xhrCheck = false;
                clearInterval(intreval);
            }

        }
    }, false);

    xmlRq.onreadystatechange = function () {
        if (this.readyState == 4) {
           if(this.status == 200) {
            console.log(this.response);
            }
          }
    };
    xmlRq.open('POST', '/photo_uploader.php');
    console.log(formData.getAll('file'));
    xmlRq.send(formData); 

使用这段代码我遇到了同样的问题。

在 FireBug 中我可以看到 POST 数据,它总是有数据要发送。

我不明白为什么有时我会收到空​​的 $_FILES$_POST 以及我的错误所在。

感谢您的宝贵时间和帮助。

最佳答案

尝试增加 upload_max_filesize 和 post_max_size。 您可以从 php.ini 文件更改这些值。

关于使用 FormData 的 javascript 文件上传问题,收到空的 $_FILES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32819658/

相关文章:

javascript - 在类名末尾添加一个整数

javascript - jQuery 设置 iFrame 的 onLoad 属性

javascript - 按对象内的值和日期对数组进行排序

javascript - 错误: TypeError: undefined is not a constructor (evaluating '$browser.cookies()' )

javascript - 使用 Redis 和 PHP 进行分页

javascript - Rails 3.1 Ajax 部分中的 Google Charts

javascript - 如何停止 mouseleave 上的倒计时?

php - 从头开始制作 Android 聊天应用程序

php - zf2 session 验证失败

jquery - Chrome : Uncaught ReferenceError: $ is not defined