【问题标题】:Using Multer to upload a file and briefly store it in memory before parsing and uploading to database使用 Multer 上传文件并在解析和上传到数据库之前将其短暂存储在内存中
【发布时间】:2017-03-04 05:29:08
【问题描述】:

我对编程比较陌生,但我会尽量做到简洁。

我正在使用 multer 尝试上传 XML 文件。我有一个 Node Express 服务器,并且也在使用带有 .jsx 的 React。上传后,我将解析该文件数据并将其发布到 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>

这是我在同一组件中的表单提交处理。 onSubmit 是自动提交表单还是我应该在这里做其他事情?

handleSubmit(event) {
  console.log('hey');
  event.preventDefault();
  this.props.postSongs();
},

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 的特定输入,而我的与表单操作匹配的帖子应该与所有这些匹配?

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

【问题讨论】:

    标签: javascript node.js express reactjs multer


    【解决方案1】:

    您不是在发布表单,而是在发布一个空的正文。试试这个:

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

    【讨论】:

    • 啊啊啊啊!非常感谢!我是如此接近!
    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 2019-12-25
    • 1970-01-01
    • 2014-04-09
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多