通过jQuery AJAX拖放文件上传受到文件大小的奇怪限制

时间:2014-04-30 22:16:42

标签: javascript jquery jquery-file-upload jqxhr

我一直在通过jQuery AJAX编写文件上传代码。一切都运行良好unitl我试图上传大约4 MB的文件。我错过了什么?

事实如下:

  1. php.ini - 已检查(最大上传文件大小,最长执行时间等)
  2. 执行处理文件上传的服务器端脚本,但$_POST$_FILES为空
  3. var fd似乎处理正确
  4. jQuery的大块:

    var x_upload = $(".x_upload");
    
    x_upload.on('drop', function(e) {
        e.preventDefault();
        var files = e.originalEvent.dataTransfer.files;
        handleFileUpload(files, x_upload);
    });
    
    function handleFileUpload(files, x_area) {
        for (var i = 0; i < files.length; i++)
        {
            var fd = new FormData();
            fd.append('file', files[i]);
            console.log(files[i]); //is OK
            fd.appdend('type', 'image');
            sendFileToServer(fd, x_area);
        }
    }
    
    function sendFileToServer(formData, x_area) {
        var uploadURL = "/api/upload.php";
        var jqXHR = $.ajax({
            xhr: function() {
                var xhrobj = $.ajaxSettings.xhr();
                if (xhrobj.upload) {
                    xhrobj.upload.addEventListener('progress', function(event) {
                        var percent = 0;
                        var position = event.loaded || event.position;
                        var total = event.total;
                        if (event.lengthComputable) {
                            percent = Math.ceil(position / total * 100);
                        }
                        //Set progress
                        x_area.find(".x_progress_num").text(percent);
                    }, false);
                }
                return xhrobj;
            },
            url: uploadURL,
            type: "POST",
            contentType: false,
            processData: false,
            cache: false,
            data: formData,
            success: function(data) {
                console.log(data);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                console.log("AJAX Error " + errorThrown + " " + textStatus);
                x_area.addClass('x_error');
            }
        });
    }
    

    简化服务器端

    <?php
    
    var_dump($_POST); // is empty if file is >4 MB
    var_dump($_FILES); // is empty if file is >4 MB
    
    if (!isset($_POST['type'])) {
        echo "empty type";
    } else {
        //echo "ok' only if file is ls <4MB
        echo "ok";
    }
    

    那么我可能忽略了任何文件大小限制吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

我有upload_max_filesize = 200M但我忘了增加post_max_size(正如@Jonathan Lonowski指出的那样)。这解决了我的问题。

然而,我很惊讶$_FILES["file"]["error"] > 0返回FALSE以及$_POST返回一个空数组(尽管该值是静态分配的)。

谢谢。 神秘解决了。