file upload失败

我正尝试使用Ajax将file upload到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: 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,当我试图parsing请求头来初始化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) 

但是,如果我不把内容types设置为multipart / form-data,那么这个请求就会被这个busboy丢弃。

我甚至试过使用Muller软件包,但也给了我同样的错误(后来我发现它是build立在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不要设置默认的内容types,但它不工作。

设置contentType:'multipart / form-data'也不起作用,并给我相同的'多部分:边界找不到'的错误。 所以任何人都可以帮助我摆脱这个错误。

你应该使用FormData API而不是自己去做。 然后,当您将FormData实例传递给$.ajax() ,它将自动为您设置正确的标题。 这是一个例子 。

将MIMEtypes设置为“multipart / form-data”最好使用FormData 。 FormData中的键/值以查询的forms放置,并由“&”分隔。 这是固定的,服务器已知。

例如: category=laptop&brand=apple&price=150000,250000

但是对于文件,情况并非如此,所以我们必须提供一些方法,以便服务器上的代码可以将文件从其他数据中分离出来。

为此,我们提供一个标记文件数据开始和结束的边界值。

使用contentType: 'multipart/form-data;boundary=abc'

显然,错误显示“多部分:边界未find” ,因此边界缺失

提供边界解决了这个问题。

有关更多详细信息,请参阅: https : //stackoverflow.com/a/20321259

如果这不起作用,然后尝试设置contentType: false