Node.js服务器中文件名为何被错误修改?如image.jpeg变imagej.peg
文件上传时文件名异常修改问题求助
上传文件时出现文件名被错误修改的情况:
- image.jpeg → imagej.peg
- document.docx → documentd.ocx
- excelfile.xlsx → excelfilex.lsx
React前端上传代码
uploadFiles = async () => { const formData = new FormData(); for (let i = 0; i < this.state.selectedFiles.length; i++) { formData.append(`upfile[${i}]`, this.state.selectedFiles[i]); } formData.forEach(item => console.log('loop item =>', item)); const response = await fetch(myend_pointURI + '/upMulFiles', { method: 'POST', headers: { 'Authorization': `Bearer ${Cookies.get('sarstoken')}`, }, body: formData, }); const resp = await response.json(); if (resp.resp === 'ok') { this.refreshRecentItems(); } }
Node.js后端处理代码
app.post("/upMulFiles", jwt.authenticateToken, urlencodedParser, async function (req, res, next) { const filepath = '/home/user675/Files/NewUpFiles'; try { for (let key in req.files) { let file = req.files[key]; // Access individual file details console.log('file =>', file); file.mv(`${filepath}/${file.name}`, function (err) { if (err) { return res.status(500).send(err); } }); } } catch (err) { console.log('=> try err', err); res.send({ resp: 'err', details: err }); } res.send({ resp: 'ok' }); });
解决方案建议
- 替换文件名字段:后端代码中使用
file.originalname替代file.name。多数文件上传中间件(如express-fileupload)中,originalname才是用户上传的原始文件名,name可能是中间件解析后修改过的名称。修改后代码:
file.mv(`${filepath}/${file.originalname}`, function (err) { if (err) { return res.status(500).send(err); } });
- 调整FormData键名格式:前端不要使用
upfile[${i}]这种带方括号的键名,避免后端解析异常。可换成以下两种方式:
// 方式一:使用序号后缀 formData.append(`upfile-${i}`, this.state.selectedFiles[i]); // 方式二:重复使用同一个键 formData.append('upfile', this.state.selectedFiles[i]);
- 检查文件上传中间件配置:如果使用
express-fileupload,初始化时开启preserveExtension: true,避免扩展名被错误截断:
const fileUpload = require('express-fileupload'); app.use(fileUpload({ preserveExtension: true }));
内容的提问来源于stack exchange,提问作者Manna
相关产品推荐
相关产品推荐

