Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 文件上载失败_Ajax_Node.js_Multer_Busboy - Fatal编程技术网

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

我正在尝试使用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: 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();
            }
        });