使用multer将FormData对象作为node.js服务器接收

时间:2015-09-20 12:55:07

标签: javascript jquery ajax node.js express

我有一个带有两个按钮的HTML表单(以及其他文本输入区域),我有一些前端的javascript代码来处理提交。在提交时,我创建一个FormData对象并将文件存储在其中。然后我通过jquery ajax请求将它发送到node.js服务器。但是,这就是问题所在 - 当我尝试访问服务器中的文件时,文件总是未定义的 - 我已尝试使用req.body, req.files, req.file访问它,但它始终未定义。这是ajax请求的问题,还是我接收它的方式?

上传文件按钮:

<input id="element_3" name="element_3" class="element file required" accept="application/pdf" type="file"/>

提交按钮:

<input id="saveForm" class="button_text" type="submit" name="submit" value="Submit"/>

处理提交:

$('#form_1039889').submit(function(event) {
    event.preventDefault();
    event.stopImmediatePropagation();
    var file = $('#element_3').get(0).files[0];
    var fd = new FormData();
    fd.append('pdf', file);
    $.ajax({
        url: '/addPdf',
        data: fd,
        processData: false,
        contentType: false,
        type: 'POST',
        success: function(response) {
           //success TODO code
        }
    });
});

相关服务器代码:

app.post('/addPdf', [multer({dest: "./uploads/"}).single('avatar'), function(req, res) {
    console.log("file: " + req.file);
}]);

1 个答案:

答案 0 :(得分:0)

而不是单个('avatar')使用single('pdf.file'),因为你为文件设置了pdf对象。