Ajax 文件上载失败
我正在尝试使用Ajax将文件上载到Nodejs服务器 Ajax代码:Ajax 文件上载失败,ajax,node.js,multer,busboy,Ajax,Node.js,Multer,Busboy,我正在尝试使用Ajax将文件上载到Nodejs服务器 Ajax代码: var url = 'http://<ip:port>/upload/'; var formValues = $("#files").get(0).files; $.ajax({ url: url, type: 'POST', data: formValues, processData: false, cache: false, beforeSend: functio
var url = 'http://<ip:port>/upload/';
var formValues = $("#files").get(0).files;
$.ajax({
url: url,
type: 'POST',
data: formValues,
processData: false,
cache: false,
beforeSend: function( xhr ) {
xhr.setRequestHeader('content-type', 'multipart/form-data');
},
success: function (data) {
console.log("Store details: %j", data);
Backbone.history.navigate('store');
window.location.reload();
}
});
但是,如果我没有将内容类型设置为multipart/formdata,那么busboy将丢弃该请求
我甚至尝试使用multer软件包,但它也给了我同样的错误(后来我发现它是基于busboy构建的)
我甚至尝试将contentType设置为false
$.ajax({
url: url,
type: 'POST',
data: formValues,
processData: false,
cache: false,
contentType: false,
success: function (data) {
console.log("Store details: %j", data);
Backbone.history.navigate('store');
window.location.reload();
}
});
强制JQuery不设置默认内容类型,但它也不起作用
设置contentType:“多部分/表单数据”也不起作用,并给我相同的“未找到多部分:边界”错误。所以任何人都可以帮我摆脱这个错误。你应该使用FormData API,而不是自己尝试。然后,当您将FormData实例传递到
$.ajax()
时,它将自动为您设置正确的头 最好使用FormData
并将MIME类型设置为“multipart/form data”。
FormData中的键/值以查询的形式放置,并用“&”分隔。这是固定的,服务器知道
示例:category=laptop&brand=apple&price=150000 250000
但对于文件,情况并非如此,所以我们必须提供一些方法,以便服务器上的代码可以将文件与其他数据分离
为此,我们提供了一个边界值,用于标记文件数据的开始和结束
使用contentType:'多部分/表单数据;边界=abc'
很明显,错误显示“未找到多部分:边界”,因此边界丢失
提供边界可以解决问题
有关更多详细信息,请参阅:
如果这不起作用,请尝试设置contentType:false
$.ajax({
url: url,
type: 'POST',
data: formValues,
processData: false,
cache: false,
contentType: false,
success: function (data) {
console.log("Store details: %j", data);
Backbone.history.navigate('store');
window.location.reload();
}
});