Home  >  Q&A  >  body text

javascript - 在html5中jquery如何用ajax上传文件

现在最新的firefox和chrome都已经支持用FormData来自定义multipart/form-data的具体字段,这样用ajax上传文件就成了可能,但我在使用最新版jquery的ajax方法上传文件时,却遇到了问题,jquery默认设置的contentType不对,导致后端无法正确识别文件上传请求

这是使用原生XHR来上传文件时的header截图,我们可以清楚的看到Content-Type已经做了特殊设定,这时后端可以正确的接收到文件

这是使用jQuery上传的截图,可以看到Content-Type是普通的表单提交,后端完全无法识别这次请求

下面是我的代码,不知道是什么问题
http://jsfiddle.net/aejUC/

黄舟黄舟2748 days ago595

reply all(2)I'll reply

  • 伊谢尔伦

    伊谢尔伦2017-04-10 12:44:23

    contentType: false // 告诉 jQuery 别设置内容类型

    var fd = new FormData(document.getElementById("fileinfo"));
    fd.append("CustomField", "This is some extra data");
    $.ajax({
      url: "stash.php",
      type: "POST",
      data: fd,
      processData: false,  // tell jQuery not to process the data
      contentType: false   // tell jQuery not to set contentType
    });

    https://developer.mozilla.org/en-US/d...

    reply
    0
  • PHP中文网

    PHP中文网2017-04-10 12:44:23

    是不是可以加上jQuery的配置:

    $('#jquery').submit(function () {
        var formData;
    
        formData = new FormData();
        formData.append('file', $('input[name=file]', this).get(0).files[0]);
    
        $.ajax({
            url: '/',
            contentType:"multipart/form-data",
            data: formData,
            processData: false,
            type: 'POST'
        });
        
        return false;
    });

    reply
    0
  • Cancelreply