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

标签 javascript jquery jquery-file-upload jqxhr

我一直在通过 jQuery AJAX 编写文件上传代码。一切正常,直到我尝试上传大约 4 MB 左右的文件。我缺少什么?

事实如下:

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

jQuery block :

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

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

最佳答案

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

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

谢谢。 谜团解开了。

关于javascript - 通过 jQuery AJAX 上传的拖放文件受到文件大小的奇怪限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23398994/

相关文章:

javascript - jquery.fileupload 插件导致 require.js 随机导入失败

javascript - 如何将 jQueryeach() 函数转换为单个函数

javascript - typescript + Angular : variable changing context

jQuery UI slider - 显示大于的最大值,附加 "+"

jquery - toggleClass 不会删除 'showing' 的类

javascript - Firefox 后退按钮无法与 Google 广告正常配合

node.js - 如何通过 node.js 将上传流式传输到 S3 并向用户显示进度?

javascript - 如何将 Jquery-file-upload 与backbone.js 和 require.js 一起使用

javascript - 与闭包的混淆以及为什么返回不正确的值

javascript - 使用 JavaScript 设置 gridview 内文本框的格式