首页 文章

使用FormData和jQuery上传Ajax大文件无法发布数据

提问于
浏览
1

我正在尝试使用FormData通过AJAX上传文件 . 如果我在没有选择要上传的文件的情况下提交AJAX调用,则帖子工作正常,并且在服务器上接收其他字段(不是文件上载) . 如果我选择要上传的文件,则调用到达服务器时没有任何数据(在PHP中,$ _POST和$ _FILES数组都是完全空的) . 我知道如果你没有告诉jQuery不设置contentType会发生这种情况,但是我将contentType和processData设置为false,它仍然不会发送数据 .

这是我的代码:

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:

<form id="frmNewComment544" enctype="multipart/form-data" method="post" action="">
<div>
    <textarea style="width:100%;" cols="30" rows="5" id="newnote_544"></textarea>
</div>
<div>
    <input type="button" onclick="AddComment(544)" value="Append Comment">    
</div>
<div class="attachment-browsers" id="attachmentBrowsers544" style="display: block;">Attachments will be uploaded when you append a comment.
    <div>
        <input type="file" id="upload_544_151ab3cfe69" name="upload_544_151ab3cfe69" class="upload-544">
    </div>
    <div>
        <input type="file" id="upload_544_3y4afe6eg7a" name="upload_544_3y4afe6eg7a" class="upload-544">
    </div>
</div>
</form>

编辑2:好的,问题只发生在上传相对较大的文件时(不是很大 - 在这种情况下是10MB) . 小文件上传OK . 所以现在的问题是为什么我不能使用这种方法上传大文件?

2 回答

  • 0

    我没有看到您的表格的任何参考 . 可能你会这样做:

    .....
    
          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(),
    
    ....
    
  • 1

    我知道这会是愚蠢的!

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

相关问题