2012-03-08 29 views
54

当我使用XMLHttpRequest时,使用FormData正确上传文件。但是,当我切换到jQuery.ajax时,我的代码中断了。如何使用jQuery.ajax和FormData上传文件

这是工作的原代码:

function uploadFile(blobFile, fileName) { 
    var fd = new FormData(); 
    fd.append("fileToUpload", blobFile); 
    var xhr = new XMLHttpRequest(); 
    xhr.open("POST", "upload.php", true); 
    xhr.send(fd); 
} 

这里是我的不成功尝试jQuery.ajax

function uploadFile(blobFile, fileName) { 
    var fd = new FormData(); 
    fd.append("fileToUpload", blobFile); 
    var xm = $.ajax({ 
     url: "upload.php", 
     type: "POST", 
     data: fd, 
    }); 
} 

我在做什么错?我怎样才能使用AJAX来正确上传文件?

回答

155

您必须将processData:false,contentType:false添加到您的方法,以便jQuery不会更改标头或数据(这打破了您当前的代码)。

function uploadFile(blobFile, fileName) { 
    var fd = new FormData(); 
    fd.append("fileToUpload", blobFile); 

    $.ajax({ 
     url: "upload.php", 
     type: "POST", 
     data: fd, 
     processData: false, 
     contentType: false, 
     success: function(response) { 
      // .. do something 
     }, 
     error: function(jqXHR, textStatus, errorMessage) { 
      console.log(errorMessage); // Optional 
     } 
    }); 
} 
+4

如果可以的话,我会赞成这1000次。在SO这个问题的所有其他答案中,这一个工作得最好,也是最简单的。谢谢。 – sqram 2012-12-03 19:16:40

+6

警告:直到第10版,FormData才被IE支持。 – 2013-10-15 15:48:54

+6

在这个答案(和问题)中,什么是“blobFile”?它是一个input.val()? – 2014-07-16 20:29:05