关于php:使用FormData进行Ajax大文件上传,jQuery无法发布数据

Ajax large-ish file upload with FormData and jQuery fails to post the data

我正在尝试使用formdata通过Ajax上传文件。如果我提交Ajax调用而不选择要上载的任何文件,那么日志工作正常,并且服务器上接收到其他字段(不是文件上载)。但是,如果我选择要上载的文件,那么调用将在没有任何数据的情况下到达服务器(在PHP中,$u post和$u files数组都是完全空的)。我知道如果您未能告诉jquery不要设置ContentType,就会发生这种情况,但是我将ContentType和ProcessData设置为false,它仍然不会发送数据。

这是我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function AddComment(taskid) {
    var newnote = $('#newnote_'+taskid).val();
    if(newnote != '') {
        $('#tasklist *').css('cursor', 'progress');
        var formData = new FormData();

        $('.upload-' + taskid).each(function() {
            if (this.files[0]) {
                formData.append($(this).attr('name'), this.files[0]);
            }
        });
        formData.append("taskid", taskid);
        formData.append("newnote", newnote);

        $.ajax({
            url: '/modules/task/ajax/ajaxAddComment.php',
            data: formData,
            processData: false,
            contentType: false,
            type: 'post',
            success: function(data){
                alert(data);
            }
        });
    }
}

我肯定我在做些傻事,但我看不见什么…?

编辑:这里是HTML:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form id="frmNewComment544" enctype="multipart/form-data" method="post" action="">

    <textarea style="width:100%;" cols="30" rows="5" id="newnote_544"></textarea>


    <input type="button" onclick="AddComment(544)" value="Append Comment">    

Attachments will be uploaded when you append a comment.
   
        <input type="file" id="upload_544_151ab3cfe69" name="upload_544_151ab3cfe69" class="upload-544">
   
   
        <input type="file" id="upload_544_3y4afe6eg7a" name="upload_544_3y4afe6eg7a" class="upload-544">
   

</form>

编辑2:好的,这个问题只发生在上传相对大的文件时(不是大文件——在本例中是10MB)。小文件上传正常。所以现在的问题是为什么我不能用这个方法上传大文件?


我知道这会是愚蠢的事!

我的php.ini对文件上传有默认的2MB限制。哦。


我看不到你的表格。也许你会这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.....

      var form = $('form#frmNewComment544');

        var formdata = false;

        if (window.FormData){
            formdata = new FormData(form[0]);
        }

        var formAction = form.attr('action');

        $.ajax({
            url: formAction,
            data : formdata ? formdata : form.serialize(),

....