Node.js 对服务器的获取/发布请求:接收多部分/表单数据时为空数组;

Node.js 对服务器的获取/发布请求:接收多部分/表单数据时为空数组;,node.js,reactjs,post,digital-ocean,multer-s3,Node.js,Reactjs,Post,Digital Ocean,Multer S3,我正在尝试将一个图像(ReactJs)上传到我的服务器(NodeJs+Express+multerJs)到digitalocean Im使用具有多部分/表单数据的POST请求 我从multerJs收到一条成功消息,但我可以在服务器上的日志中看到文件:[]有一个空数组。当然,数字海洋并没有添加任何文件 当我在不处理表单提交的情况下对表单执行相同的Post请求时,一切都正常,文件数组也不是空的。上面的代码正常工作: <form method="post" enctype="multipart/

我正在尝试将一个图像(ReactJs)上传到我的服务器(NodeJs+Express+multerJs)到digitalocean

Im使用具有多部分/表单数据的POST请求

我从multerJs收到一条成功消息,但我可以在服务器上的日志中看到文件:[]有一个空数组。当然,数字海洋并没有添加任何文件

当我在不处理表单提交的情况下对表单执行相同的Post请求时,一切都正常,文件数组也不是空的。上面的代码正常工作:

<form method="post" enctype="multipart/form-data" action="http://localhost:3004/upload_image_test_4"   >    </form>
如果有人能帮我的话!(我已经疯狂地用谷歌搜索过了,,,)
谢谢

来自输入的文件不是数组,而是文件数组,请尝试[…e.target.Files][0]

在setState的React和async行为中与事件池相关

onChange = (e) => {

      const uploadFile = e.target.files[0] ;
      this.setState({ file: uploadFile  });
};
修改onChange处理程序:

方法1:

将文件放入变量并将其设置为setState

onChange = (e) => {

      const uploadFile = e.target.files[0] ;
      this.setState({ file: uploadFile  });
};
具有event.persist()的方法2:

//编辑我找到了自己问题的解决方案。。。在github页面上,专门讨论与Next.js相关的错误: 由于某些原因,文件未发送到请求。 我以这种方式使用axios,它现在可以工作了:

反应js:

    sendFile = (e) => {
      const data = new FormData();
      const file = e.target.files[0];
      data.append('avatar', file);
     axios
            .post('http://localhost:3004/upload_test_stack_2', data)
            .then(console.log)
          .catch(console.error);  

      }
服务器端(nodeJs):


我得到了同样的结果,不幸的是,,,你能创建一个有效的邮递员示例吗?是的,邮递员有效,,,,你能提供邮递员的脚本吗:错误,邮递员也不起作用,这里可以找到一个类似的存储库:它可以用于上传,但不能用于axios或邮递员上的post请求,您能否通过浏览器复制成功的帖子详细信息,格式为:chrome dev network..谢谢!经过几天的研究,这个提示节省了我的时间。
onChange = (e) => {
         e.persist();
         this.setState({ file: e.target.files[0] });
    };
    sendFile = (e) => {
      const data = new FormData();
      const file = e.target.files[0];
      data.append('avatar', file);
     axios
            .post('http://localhost:3004/upload_test_stack_2', data)
            .then(console.log)
          .catch(console.error);  

      }
const upload = multer({
    storage: multerS3({
    s3: s3,
    bucket: 'My Bucket',
    acl: 'public-read',
    key: function(request, file, cb) {


        cb(null, file.originalname);
    }
    })

});

router.post('/upload_test_stack_2', upload.single('avatar'), (req, res) 
 =>      {

    console.log(req.file, 'The file appears here');
    return res.sendStatus(200);
      });