【发布时间】:2015-07-08 20:29:36
【问题描述】:
我目前有一个传统的 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 表单中发出 post 请求,文件和电子邮件会正确发送,但是一旦我将表单提交作为 ajax 请求或 express 调用,则不会发送文件。任何帮助将不胜感激。
【问题讨论】:
-
你有什么中间件?
-
对不起,我应该指定的。我正在使用 bodyparser 和 multer 服务器端。
标签: javascript ajax node.js email express