1

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();
    }
});

Node Server で 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 に設定しないと、リクエストはバスボーイによって破棄されます。

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' エラーが発生します。したがって、誰でもこのエラーから抜け出すのを手伝ってくれます。

4

2 に答える 2

2

自分でやろうとするのではなく、FormData API を使用する必要があります。次に、 FormData インスタンスを に渡すと$.ajax()、適切なヘッダーが自動的に設定されます。ここに例があります

于 2014-09-15T02:00:29.923 に答える