Ajax 使用 FormData 上传大型文件,jQuery 无法 post 数据
Ajax large-ish file upload with FormData and jQuery fails to post the data
我正在尝试使用 FormData 通过 AJAX 上传文件。如果我在没有 select 上传任何文件的情况下提交 AJAX 调用,则 post 工作正常,并且在服务器上收到其他字段(不是文件上传)。如果我 select 要上传的文件,调用到达服务器时没有任何数据(在 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。那么现在的问题是为什么我不能使用这种方法上传大文件?
我没有看到任何对您的表单的引用。
也许你会这样做:
.....
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(),
....
我就知道这会很蠢!
我的 php.ini 有默认的 2MB 文件上传限制。哦。
我正在尝试使用 FormData 通过 AJAX 上传文件。如果我在没有 select 上传任何文件的情况下提交 AJAX 调用,则 post 工作正常,并且在服务器上收到其他字段(不是文件上传)。如果我 select 要上传的文件,调用到达服务器时没有任何数据(在 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。那么现在的问题是为什么我不能使用这种方法上传大文件?
我没有看到任何对您的表单的引用。 也许你会这样做:
.....
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(),
....
我就知道这会很蠢!
我的 php.ini 有默认的 2MB 文件上传限制。哦。