【问题标题】:how to upload and post file to node express server如何上传和发布文件到节点快递服务器
【发布时间】: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


【解决方案1】:

File uploading with Express 4.0: req.files undefined

body-parser 模块只处理 JSON 和 urlencoded 格式 提交,而不是多部分(如果您是 上传文件)。

对于多部分,您需要使用类似 connect-busboy 或 multer 或 connect-multiparty(多方/强大是什么 最初用在 express bodyParser 中间件中)。还有FWIW,我是 在 busboy 之上的更高级别的层上工作,称为 改革。它带有一个 Express 中间件,也可以使用 分开。

编辑:

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

【讨论】:

  • 我使用 multer 来处理多部分。我想知道为什么当我以 html 表单发出我的发布请求时,我的服务器能够处理和发送文件。因为如果我让一个 html 表单处理所有内容(没有 ajax),电子邮件将与文件完美发送。如果是这样的话,你还会推荐busboy吗?似乎一切都在服务器端工作 - 我如何在客户端处理事情是问题
猜你喜欢
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多