我试图绕过这个错误,我不明白为什么。我看过它的几个帖子,但它们都是不同的情况,没有一个与我相匹配。所以感谢帮助。 我想上传多个文件上传。 但我确实上传文件它的工作只有一个。 但是当我尝试上传多个文件时,它无法正常工作 你能给我一个答案吗?
router.post('/contents/insert/upload', ensureAuthenticated, function(req, res, next) {
var form = new formidable.IncomingForm();
form.parse(req);
// form.on("fileBegin", function (name, file){
// console.log('upload come on3');
//
// });
form.on("file", function (name, file){
fs.readFile(file.path, function(error, data){
var filePath = __dirname + '/../public/uploads/' + file.name;
fs.writeFile(filePath, data, function(error){
if(error){
throw err;
//res.redirect('back');
}else {
res.redirect('back');
}
});
});
});
});

<form action="/adm/contents/insert/upload" method="post" enctype="multipart/form-data" >
<!-- <input type="file" name="file" />
<input type="submit" /> -->
<div class="file-field input-field">
<div class="btn">
<span>input images</span>
<input type="file" name="file" multiple>
</div>
<div class="file-path-wrapper">
<input class="file-path validate" type="text">
</div>
</div>
<input type="submit" class="btn waves-effect waves-light" value="upload" />
</form>
&#13;
答案 0 :(得分:2)
将为上传中的每个文件触发file
事件,因此最终您的代码将为每个上传的文件发出res.redirect()
。这将导致错误(您只能在请求的生命周期内发出重定向或发回一个响应)。
相反,您想要监听end
事件,并在那里发出重定向:
form.on("file", function (name, file) {
...handle the file copy here, but don't call `res.redirect()` anywhere...
});
form.on("end", function() {
res.redirect('back');
});
FWIW,在我看来,你想要设置Formidable的uploadDir
选项,或使用fs.rename()
,而不是在上传后将文件写入新位置(不是'非常有效率。)