ajax 发送的 formdata,后台为什么收不到

2021-05-11 15:40:13 +08:00
 siwadiya

ajax 发送 formdata,用 formidable 来处理接收的数据,然后存到本地; 用 axios 发送的请求,可以正常运行,但是用原生 ajax 的就无效,是哪里写错了吗

<div id="app">
  <input type="file" name="" id="fileSelect" />
  <button type="submit" id="fileUpload">fileUpload</button>
</div>
<script>
  const fileSelect = document.getElementById('fileSelect');
  const fileUpload = document.getElementById('fileUpload');
  fileUpload.addEventListener('click', picUpload);
  function picUpload() {
    let formdata = new FormData();
    console.log('filelist: ', fileSelect.files);
    formdata.append('myfile', fileSelect.files[0]);
    let xhr = new XMLHttpRequest();
    xhr.open('POST', 'http://127.0.0.1:3000', true);
    xhr.setRequestHeader('Content-Type', 'multipart/form-data');
    xhr.send(formdata);
  }
</script>
const http = require('http'),
  formidable = require('formidable');
path = require('path');
const server = http.createServer(function (req, res) {
  if (req.method.toLowerCase() === 'post') {
    const form = formidable({
      multiples: true,
      uploadDir: path.resolve(__dirname, 'upload'),
    });

    form.parse(req, (err, fields, files) => {
      console.log('fields:', fields);
      console.log('files:', files);
      res.writeHead(200, {
        'content-type': 'application/json',
        'Access-Control-Allow-Origin': '*',
      });
      res.end(JSON.stringify({ fields, files }, null, 2));
    });
    return;
  }
  res.writeHead(200, {
    'content-type': 'text/html',
    'Access-Control-Allow-Origin': '*',
  });
  res.end('Done!');
});
server.listen(3000);

打印出来 fields 和 files 都是空的

1360 次点击
所在节点    JavaScript
1 条回复
jay4497
2021-05-11 16:13:54 +08:00
把 setRequestHeader 那行去掉就行了。

developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

这里有段 warning 好像说的是这个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX