【发布时间】: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