使用express-fileupload检查req.files为空时报错求助
解决express-fileupload检查文件时的错误问题
兄弟,我帮你捋清楚问题出在哪哈!你代码里的错误根源是对express-fileupload返回的req.files结构理解错了——它不是数组,是个对象,直接用length判断肯定会报错!
问题原因拆解
当没有文件上传时,req.files会是undefined;上传了文件时,它是一个以表单文件字段名为键的对象(比如你的字段名是filetoupload,那req.files.filetoupload就是对应的文件对象)。你原来用req.files.length,要么是访问undefined的length属性直接抛错,要么是对象本身没有length属性,判断逻辑完全不生效。
修正后的代码示例
直接改成检查req.files是否存在,再检查目标字段是否存在就好:
// 正确的文件存在检查逻辑 if (req.files && req.files.filetoupload) { console.log('file is exist'); const file_name = req.files.filetoupload; file_name.mv(`public/uploads/${file_name.name}`, function(err) { if (err) { console.log(err); let profile_pic_name = ''; // 这里可以加错误响应逻辑,比如res.status(500).send('上传失败') } else { let profile_pic_name = file_name.name; // 文件上传成功后的业务逻辑,比如返回文件名给前端 } }); } else { console.log('No file uploaded'); // 处理未上传文件的场景,比如提示用户选择文件 }
额外提示(多文件上传场景)
如果你的需求是支持多文件上传,记得把表单里的文件字段改成数组格式(比如<input type="file" name="filetoupload[]" multiple>),这时候req.files.filetoupload才会变成数组,这时候才能用length判断上传文件的数量:
// 多文件上传时的检查逻辑 if (req.files && req.files.filetoupload && req.files.filetoupload.length > 0) { console.log(`共上传了${req.files.filetoupload.length}个文件`); // 遍历处理每个文件 req.files.filetoupload.forEach(file => { file.mv(`public/uploads/${file.name}`, err => { if (err) console.log(err); }); }); }
内容的提问来源于stack exchange,提问作者Yogesh k
相关产品推荐
相关产品推荐

