Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Multer上传文件,并在解析和上传到数据库之前将其短暂存储在内存中_Javascript_Node.js_Express_Reactjs_Multer - Fatal编程技术网

Javascript 使用Multer上传文件,并在解析和上传到数据库之前将其短暂存储在内存中

Javascript 使用Multer上传文件,并在解析和上传到数据库之前将其短暂存储在内存中,javascript,node.js,express,reactjs,multer,Javascript,Node.js,Express,Reactjs,Multer,我对编程比较陌生,但我会尽量使它尽可能简洁 我正在使用multer尝试上载XML文件。我有一个Node Express服务器,并且正在使用React with.jsx。上传后,我将解析该文件数据并将其发布到Postgres数据库。考虑到这一点,我没有将上传的文件写入磁盘,我只是在解析之前使用multer的buffer属性将其存储在内存中 我让multer在一个小型测试项目中使用jQuery进行表单提交,但我在这里没有使用jQuery,我不确定表单提交在React中是如何工作的,或者这是否是问题所

我对编程比较陌生,但我会尽量使它尽可能简洁

我正在使用multer尝试上载XML文件。我有一个Node Express服务器,并且正在使用React with.jsx。上传后,我将解析该文件数据并将其发布到Postgres数据库。考虑到这一点,我没有将上传的文件写入磁盘,我只是在解析之前使用multer的buffer属性将其存储在内存中

我让multer在一个小型测试项目中使用jQuery进行表单提交,但我在这里没有使用jQuery,我不确定表单提交在React中是如何工作的,或者这是否是问题所在。我只包括与使用multer直接相关的代码。其他一切都很好

这是我的表格:

<form
  id="uploadForm"
  ref="form"
  encType="multipart/form-data"
  method="post"
  action="/upload"
  onSubmit={this.handleSubmit}
>
 <input
   type="file"
   name="songlist"
 />
 <input
   type="submit"
   value="UploadFile"
   name="submit"
 />
</form>
postSongs()调用我的服务器端路由:

postSongs() {
  axios.post("/upload")
    .then(() => {
      console.log('success')
    })
    .catch((err) => {
      console.error(err);
    });
},
在我的服务器端路径中,我正在发出post请求,该请求应将该文件存储在multer的内存中:

const multer = require('multer');
const upload = multer({inMemory: true});

router.post('/upload', upload.single('songlist'), (req, res, next) => {

  console.log(req.file);

  knex('songs')
    .where('admin_id', adminId)
    .first()
    .then((songs) => {
      console.log(songs);
    })
  .catch((err) => {
    next(err);
  });
});
我知道这段代码中缺少了实现最终目标的部分,但现在我只是尝试记录multer的文件对象(req.file)。我以为
upload.single('songlist')
应该访问表单中名为songlist的特定输入,而匹配表单操作的帖子应该匹配所有这些


我认为我没有正确地解释这一点。有什么帮助吗?我在这上面浪费了太多时间。

你不是在发布表单,而是在发布一个空的主体。请尝试以下方法:

var formData = new FormData(document.getElementById('uploadForm'));
axios.post('upload', formData)
  .then(() => {
    console.log('success');
  })
  .catch((err) => {
    console.error(err);
  });

啊!非常感谢!我是如此接近!
var formData = new FormData(document.getElementById('uploadForm'));
axios.post('upload', formData)
  .then(() => {
    console.log('success');
  })
  .catch((err) => {
    console.error(err);
  });