我目前有一个传统的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请求或快速呼叫,该文件就不会被发送。任何帮助将不胜感激。
答案 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