Express.js和multer:如何知道文件何时全部上传
Express.js and multer: how to know when the files are all uploaded?
我使用Multer模块上传文件。虽然一切正常,但他们的github页面末尾有一条警告,内容如下:"警告:文件上传完成后,req.body将被完全解析。过早访问req.body可能会导致错误。"
这让我很担心。我只是找不到一种方法让.post中间件知道文件何时上传,req.body何时可以使用。这是我的代码:
app.js:
app.use(multer({
dest: './uploads/',
rename: function (fieldname, filename) {
return filename.replace(/'W+/g, '-').toLowerCase() + Date.now();
},
putSingleFilesInArray: true
})
);
upload.js:
router.route('/')
.get(function(req, res){
res.render('uploads');
})
.post(function(req, res){
//how to wait here for the file to upload?
});
虽然我知道onParseEnd,但我不知道如何实现它,所以我至少有一些关于正在完成的上传过程的信息。
Multer是路由器链的一部分。这意味着express将首先执行multer,只有在multer完成对表单的解析后,它才会继续执行到您的.post()
处理程序。页面上的警告用于从多个回调访问req.body
,如onFileUploadData()
等。因此,执行顺序为:
- onParseStart
- onFileUploadStart/onFileUploadData
- onFileUploadComplete
- onParseEnd
- 您的
.post()
处理程序
如果我正确理解文档,则警告仅适用于可以传递给multer本身的事件处理程序。当请求到达处理程序时,multer已经完成,所有文件都已经上传。
例如,问题存在于您已经使用的rename
事件中,但此函数实际上接收了四个参数fieldname, filename, req, res
。这意味着在完全解析请求之前,您可以访问该请求。
自2018年起,onFileUploadComplete(file,req,res)不再是multer的一部分。
你可以很容易地知道,multer中有一个选项叫做
- onFileUploadComplete(文件,请求,res)
您可以使用它并从这里发送响应。
https://github.com/expressjs/multer#options
app.use(multer({
dest: path.join(__dirname, '../uploads/fullsize'),
rename: function (fieldname, filename) {
return filename.replace(/'W+/g, '-').toLowerCase();
},
onFileUploadStart: function (file) {
console.log(file.name + ' is starting ...');
},
onFileUploadComplete: function (file, req, res) {
console.log(file.name + ' uploading is ended ...');
console.log("File name : "+ file.name +"'n"+ "FilePath: "+ file.path)
},
onError: function (error, next) {
console.log("File uploading error: => "+error)
next(error)
}
onFileSizeLimit: function (file) {
console.log('Failed: ', file.originalname +" in path: "+file.path)
fs.unlink(path.join(__dirname, '../tmpUploads/') + file.path) // delete the partially written file
}
}));
相关文章:
- 如何播放部分音频文件
- 从桌面读取python文件时高亮显示代码
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 如何使用WCF服务和javascript表单post上传.doc文件
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何在生成下载文件时显示加载动画
- Express.js和multer:如何知道文件何时全部上传
- 何时应从单个缩小的JavaScript文件中排除文件
- Require.js何时加载文件
- 是否有任何事件/方式我们可以知道文件何时完成下载
- 计算何时多次写入文件会导致不准确
- 检查多个文件何时使用 PhoneGap 下载
- 如何知道动态加载的CSS文件何时已完全加载并处于活动状态
- 确定文件的输入何时包含值
- 动态添加.js文件,如何知道它何时准备好了
- 对于不加载页面而是提供文件的表单,如何检测表单提交何时完成?
- Node.js监控文件何时创建
- 检测文件何时在浏览器中上传
- 流星差分样板-需要兼容文件和何时使用引导包
- 如何在函数中使用何时按顺序发送文件上传,这也是一个延迟承诺