如何在使用XmlHttpRequest和FormData时设置边界

10

我正在尝试在使用FormData进行XmlHttpRequest提交时,正确设置请求头中的边界。

xhr.open("POST",url);
xhr.setRequestHeader("Content-type","multipart/form-data; boundary=...");

var formData = new FormData();
formData.append("filename", inputId.files[0]);
formData.append(...);

xhr.send(formData);

我该如何在此处设置请求头中的边界?我看到请求已被设置,边界在请求中被某种方式创建。但服务器不知道如何解释它。

2个回答

22

ES方法

只需不手动设置Content-Type标头,浏览器将自动设置"multipart/form-data; boundary=..."值。


jQuery方法

如果您使用jQuery,请将contentType选项设置为false:

$.ajax({
    url: url,
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false
});

6
原帖作者要求使用XMLHttpRequest而非jQuery。 - wondergoat77
3
如果您仔细阅读,您会注意到我在评论的第一行回答了有关XMLHttpRequest的问题。它完全解决了这个问题。然后我添加了第二部分,因为其他人可能会从Google搜索并使用jQuery(那时很常见,那是2012年!)。在他们的情况下,如何关闭Content-Type并不明显。 - Anton Morozov

2
尝试查看这个链接 如何使用ajax发送multipart/form-data表单内容(不使用jquery)?。我正在尝试将此脚本与PHP一起使用作为接收器,但遇到了一些警告和混合结果的问题。我认为我的问题在于我对脚本进行了过多的修改,以至于它不再起作用。至于其他帖子中的评论“如果你使用JQuery”,我只想说这个评论对那些没有使用JQuery和不想使用JQuery的人并不有帮助,因为JQ并不是所有脚本的全部和终极解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接