如何上传文件到节点快递服务器

时间:2015-07-08 20:29:37

标签: javascript ajax node.js email express

我目前有一个传统的html电子邮件表单,用一个用户可以上传的文件发送一个帖子请求。我希望能够在发送电子邮件后闪烁成功消息,为了做到这一点,我需要使用ajax或使用express发布请求 - 而不是依赖于传统的html表单提交。

如何将文件(不是文件路径字符串)发送到服务器?目前我正在为输入元素分配一个ID并获取其值。但是,这会抓取文件的文件路径字符串,并且不会发送实际文件。

客户端

<form enctype="multipart/form-data">
     <input type="text" name="name" class="form-control" id="name">
     <!--code below uploads file -->
     <input type="file" 
            style="visibility:hidden; width: 1px;" 
            id='${multipartFilePath}' class="res" name='userFile' onchange="$(this).parent().find('span').html($(this).val().replace('C:\\fakepath\\', ''))"  /> <!-- Chrome security returns 'C:\fakepath\'  -->
    <input class="btn btn-default btn-file" type="button" value="Attach File" onclick="$(this).parent().find('input[type=file]').click();"/>
</form>
<button type="submit" class="btn btn-xl sub">Send Message</button>


<script type="text/javascript">
    $(".sub").click(function() {
    alert("submitted");
    var name, email, phone, message, resume;
    name = $("#name").val();
    email = $("#email").val();
    phone = $("#phone").val();
    message = $("#message").val();
    resume = $(".res").val();
    alert(resume);//Prints out file path
    $("#flash").text("Sending E-mail...Please wait");
    $.post("/email", {
        name: name,
        email: email,
        phone: phone,
        message: message,
        resume: resume
    }, function(data) {
        if (data == "sent") {
            $("#flash").empty().text("Email has been sent. Please check inbox !");
        }
    });
});
</script>

服务器

app.post('/email', function(req, res) {
    var toSend = req.files;//no files, this is empty
    sendEmail(req.body, toSend);//email is sent successfully
    res.send('text to send back to client');
});

req.files为空。如果我在html表单中发布帖子请求,文件和电子邮件是正确发送的,但是一旦我将表单提交作为ajax请求或快速呼叫,该文件就不会被发送。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

File uploading with Express 4.0: req.files undefined

  

body-parser模块只处理JSON和urlencoded格式   提交,而不是多部分(如果你是这样的话会是这种情况   上传文件)。

     

对于multipart,你需要使用connect-busboy或者   multer或connect-multiparty(多方/强大的是什么   最初用于express bodyParser中间件)。还有FWIW,我   在busboy之上的更高层上工作   改革。它配有Express中间件,也可以使用   分开。

编辑:

看起来您没有使用$.post()发送文件。您可以使用FormData对象,它允许您编译一组键/值对(包括文件输入)以使用ajax发送。如果表单的编码类型设置为multipart / form-data,则传输的数据格式与表单的submit方法用于发送数据的格式相同。 https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects