如何上传和发布文件到节点快递服务器
我目前有一个传统的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
- 在服务器端Node.JS上倒数一次,并发送一个页面的响应
- PassportJS – 自定义callback并将Session设置为false
- 护照,脸书不收取电子邮件
- nodemailer nodejs:sendmail退出127
- Express-mysql-session阻止passport deserializeUser运行
- NodeJS:callback不是一个函数 – 电子邮件validation
- req.session.passport为空,反序列化用户未调用 – ExpressJS,护照
- 基于Mailchimp合并标签创build独特的页面
- 无法在Layer.session – ExpressJS会话中读取未定义的属性“connect.sid”