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

我目前有一个传统的HTML电子邮件表格发送一个文件,用户可以上传发布的请求。 我希望能够在电子邮件发送之后刷新成功消息,为此,我需要使用ajax或使用快递发送请求 – 而不是依靠传统的html表单提交。

我如何发送一个文件(不是文件pathstring)到服务器? 目前我正在分配input元素一个ID和抓取它的值。 但是这会抓取到文件的文件path的string,并不会发送实际的文件。

客户

<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表单中发送了一个post请求,文件和电子邮件被正确发送,但是一旦我将表单提交为ajax请求或者快速调用,文件就不会被发送。 任何帮助,将不胜感激。

使用Express 4.0上传文件:req.files未定义

body-parser模块仅处理JSON和urlencoded表单提交,而不是多部分(如果您正在上传文件,将会是这种情况)。

对于多部分,你需要使用像connect-busboy或者multer或者connect-multiparty(multiparty /强大的就是最初在expressParser中间件中使用的东西)。 另外FWIW,我正在一个更高层次的公务人员上面改名。 它带有Express中间件,也可以单独使用。

编辑:

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