Javascript 拖放;通过jqueryajax上传的drop文件奇怪地受到文件大小的限制

Javascript 拖放;通过jqueryajax上传的drop文件奇怪地受到文件大小的限制,javascript,jquery,jquery-file-upload,jqxhr,Javascript,Jquery,Jquery File Upload,Jqxhr,我一直在编写通过jQueryAjax上传的文件。一切都很好,我试着上传大约大于4MB的文件。我错过了什么 事实如下: php.ini-已选中(最大上载文件大小、最大执行时间等) 执行处理文件上载的服务器端脚本,但$\u POST和$\u文件为空 varfd似乎处理正确 jQuery的块: var x_upload = $(".x_upload"); x_upload.on('drop', function(e) { e.preventDefault(); var files =

我一直在编写通过jQueryAjax上传的文件。一切都很好,我试着上传大约大于4MB的文件。我错过了什么

事实如下:

  • php.ini-已选中(最大上载文件大小、最大执行时间等)
  • 执行处理文件上载的服务器端脚本,但
    $\u POST
    $\u文件
    为空
  • var
    fd
    似乎处理正确
  • 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');
            }
        });
    }
    
    var x_upload=$(“.x_upload”);
    x_upload.on('drop',函数(e){
    e、 预防默认值();
    var files=e.originalEvent.dataTransfer.files;
    handleFileUpload(文件、x_上传);
    });
    函数handleFileUpload(文件,x_区域){
    对于(var i=0;i
    简化的服务器端

    <?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";
    }
    

    我有
    上传的最大文件大小=200M
    ,但我忘了增加
    上传的最大文件大小(正如@Jonathan Lonowski指出的那样)。这解决了我的问题

    但是,
    $\u FILES[“file”][“error”]>0
    返回了
    FALSE
    ,以及
    $\u POST
    返回了一个空数组(尽管该值是静态分配的)


    多谢各位谜团已解开。

    您究竟检查了哪些php.ini设置?如果归咎于
    upload\u max\u filesize
    ,那么您应该在
    $\u FILES
    中得到一个
    错误
    条目。您是否检查过浏览器首先发送的数据(开发人员工具)?@JonathanLonowski是正确的。我已将上传的最大文件大小设置为200M,但我忘了增加post最大文件大小。我现在觉得自己很傻……“然而,我很惊讶[…]”——这是定义的行为:——这是有道理的,因为只给脚本一部分数据来处理当然不是替代方案,这将导致各种各样的麻烦。