使用Multer上传文件,并在parsing并上传到数据库之前将其暂时存储在内存中

我对编程相对来说比较新,但是我会尽可能简化。

我正在使用multer来尝试上传一个XML文件。 我有一个Node Express服务器,我也使用React .jsx。 上传后,我将parsing该文件数据并将其发布到Postgres数据库。 所以考虑到这一点,我不写上传的文件到磁盘,我只是在parsing之前使用multer的缓冲区属性存储它。

我有一个使用jQuery进行表单提交的小型testing项目,但是我没有在这里使用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); }); }, 

而在我的服务器端路由,我正在发出请求,应该得到该文件存储在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); }); }); 

我知道在这个代码中缺less一些关于实现我最终目标的部分,但现在我只是试图loggingMuller的文件对象(req.file)。 我认为upload.single('songlist')应该访问名为歌曲列表中的特定input,我的post匹配表单的行动应该匹配所有的呢?

我不认为我正确地解释这一点。 任何帮助? 我浪费了这么多时间

你不张贴表格,你张贴空的身体。 试试这个:

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