使用Multer配置diskStorage仍无法修改上传文件名称
问题解决:Multer配置自定义文件名无效,仍生成随机名称
你遇到的问题其实是个很容易忽略的拼写细节——配置项名称写错了!
Multer的diskStorage配置里,用来指定自定义文件名的字段是全小写的filename,但你代码里写成了驼峰式的fileName,Multer识别不到这个错误的配置项,所以自动触发了默认的随机命名逻辑,这就是为什么文件还是以随机字符串保存的原因。
修正后的完整代码:
const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, './uploads/') }, // 注意这里是 filename,不是 fileName filename: (req, file, cb) => { cb(null, file.originalname) } }) const upload = multer({ storage: storage }) router.post('/', upload.single('carImage'), (req, res) => { res.send(req.file); })
测试验证:
修改后重新上传文件,你收到的响应里filename字段就会变成上传的原文件名(比如testOCR8.jpg),而不是之前的随机字符串了。
额外提醒一句:生产环境里直接用原文件名有风险——如果多个用户上传同名文件,后面的会覆盖掉前面的。建议给原文件名加上时间戳或唯一标识来避免冲突,比如:
filename: (req, file, cb) => { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9) cb(null, `${uniqueSuffix}-${file.originalname}`) }
内容的提问来源于stack exchange,提问作者obiwankenoobi
相关产品推荐
相关产品推荐

