在node js后端使用FormData和XmlHttpRequest上传文件显示空文件,字段 &g



我正在使用FormData和XmlHttpRequest上传csv文件。这里是代码。我有一个围绕html输入类型文件的表单,我正在执行该代码的onchange事件。我也尝试过直接发送表单,并将表单元素读取到FormData对象中。

      let formData = new FormData();
      let file = e.target.files[0];
      var blob = new Blob([file],{type: 'text/csv'});
      formData.append("payoutUpload", blob, 'processed.csv');
      let uri = encodeURI(`${window.serviceUri}${path}`);
      var req = new XMLHttpRequest();
      req.onload = (result) => {
        if (req.status === 500 && result && result.code === 'ECONNRESET') {
          console.log(
            'Connection was reset, hence retry the sendRequest function'
          );
        } else if (req.status === 200) {
        } else {
          console.log("Error while retrieving data");
        }
      }
      req.onerror = (e) => {
        console.log('There was an error while retrieving data from service', e);
      };
      req.open('POST', uri, true);
      req.setRequestHeader('Content-Type', 'multipart/form-data');
      req.setRequestHeader('Authorization', 'Bearer ' + token);
      req.send(formData);

当我发送请求时,我可以看到文件是以request Payload的形式发送的。

在NodeJs后端,我运行Express和Formidable。我不使用body-parser,我使用express的内置json和urlencoding方法。

这是最可怕的部分。

const form = formidable({multiples: true});
form.parse(req, (err, fields, files) => {
    console.log(`error is ${JSON.stringify(err)}`);
    console.log(`fields is ${JSON.stringify(fields)}`);
    console.log(`files JSON: ${JSON.stringify(files)}`);
    console.log('file in request: ' + files.payoutUpload);
    console.log(`req.body: ${req.body}`);
    options.file = files.payoutUpload;
});

得到err,字段和文件为空。我已经搜索了所有类似的问题,并正确设置请求头(这通常是问题)。我能看出这个要求。主体在服务器端仍然具有文件有效负载。但"强大"并没有解析这一点。有人能告诉我哪里做错了吗?

更新:我已经尝试了其他包来解析文件,如multer, express-fileupload,它们都返回文件为空。我也试过获取API来发送我的请求,但没有运气。

req.setRequestHeader('Content-Type', 'multipart/form-data')

当您发送multipart/form-data时,必须在头文件中包含boundary参数,但是不能知道你需要为此设置什么值

设置Content-Type头在所有。允许XMLHttpRequestFormData对象自动生成。

相关内容

最新更新