【问题标题】:multipart/form-data form with no field names没有字段名称的多部分/表单数据表单
【发布时间】:2017-09-21 07:13:13
【问题描述】:

我有一个 HTML 表单,用于将信息发送到 nodejs 后端。然后我尝试使用相同的表单实现文件上传。为此,我必须将表单的 enctype 从默认值 (application/x-www-form-urlencoded) 更改为 enctype='multipart/form-data',并且我必须在后端。我也有这个按钮:

<input type="button" value="Submit" onclick="submitRequest(this);">

我不得不改成:

<input type="submit" value="Submit" onclick="submitRequest(this);">

这很有效,因为我现在有文件上传到服务器。但是,此实现取决于表单中的字段名称。问题是我拥有的大多数字段都没有名称。

我想知道是否有一种方法可以同时发送文件和数据而不必为表单中的每个字段提供名称?我想知道是否可以将我自己的数据注入到单击提交后生成的结果中,然后再将该结果发送到后端?如果没有,还有其他方法吗?

【问题讨论】:

    标签: javascript html node.js forms multer


    【解决方案1】:

    您可以使用FormData 将键和值multipart/form-datafetch()XMLHttpRequest() 设置为POST 数据到服务器。

    <form id="form">
      <select>
        <option value="1">1</option>
        <option value="2">2</option>
      </select>
      <input type="file" />
      <input type="submit" value="Submit" />
    </form>
    

    function submitRequest(event) {
      event.preventDefault();
      var i = 0;
      var inputs = form.querySelector("input[type=file], select");
      var fd = new FormData();
      for (let el of inputs) {
        if (el.tagName === "SELECT") {
          fd.append("select", el.value)
        }
        if (el.type === "file") {
          if (el.files.length) {
            for (let file of el.files) {
              fd.append("file" + (i++), file);
            }
          }
        }
      }
      fetch("/path/to/server", {method:"POST", body:fd})
      .then(function(response) {
        return response.text()
      })
      .then(function(res) {
        console.log(res)
      })
      .catch(function(err) {
        console.log(err)
      })
    }
    
    const form = document.getElementById("form");
    form.onsubmit = submitRequest;
    

    【讨论】:

    • 我做了类似的事情:form = document.getElementById("form"); var data = new FormData(form); data.append("xyzString", xyz);,然后执行 XMLHttpRequest()。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2021-10-27
    • 2012-07-27
    • 1970-01-01
    • 2018-12-06
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    相关资源
    最近更新 更多