我正在尝试使用 Ajax 将文件上传到 Nodejs 服务器。
阿贾克斯代码:
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();
}
});
我在节点服务器中使用 busboy,当我尝试解析请求标头以初始化 busboy 对象时,它给了我这个错误。
Error: Multipart: Boundary not found
at new Multipart (/home/ubuntu/MoojicDashboard/node_modules/busboy/lib/types/multipart.js:58:11)
at Multipart (/home/ubuntu/MoojicDashboard/node_modules/busboy/lib/types/multipart.js:26:12)
at Busboy.parseHeaders (/home/ubuntu/MoojicDashboard/node_modules/busboy/lib/main.js:62:22)
at new Busboy (/home/ubuntu/MoojicDashboard/node_modules/busboy/lib/main.js:21:10)
但是,如果我没有将内容类型设置为 multipart/form-data,那么这个请求就会被 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: 'multipart/form-data' 也不起作用,并给我同样的 'Multipart: Boundary not found' 错误。所以任何人都可以帮助我摆脱这个错误。