[英]Renaming an uploaded file using Multer doesn't work (Express.js)
[英]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()
处理程序。 页面上的警告用于从multer回调访问req.body
,如onFileUploadData()
和类似的。 因此,执行顺序是:
.post()
处理程序 如果我正确理解文档,则警告仅适用于您可以传递给multer本身的事件处理程序。 当请求到达您的处理程序时,multer已经完成,并且所有文件都已上传。
例如,在您已经使用的rename
事件中存在该问题,但此函数实际上接收四个参数fieldname, filename, req, res
。 这意味着您可以在完全解析之前访问该请求。
截至2018年,onFileUploadComplete(file,req,res)不再是multer的一部分。
你可以很容易地知道它,multer中有一个选项可用
您可以使用此功能并从此处发送响应。
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
}
}));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.