使用Node.js API上传图片时遇到的问题
解决图片上传的两个问题
修改后的完整代码
const multer = require('multer'); const fs = require('fs'); const path = require('path'); // 引入path模块提取文件扩展名 const storage = multer.diskStorage({ destination: function (req, file, callback) { callback(null, './uploads'); }, filename: function (req, file, callback) { // 提取原文件扩展名并拼接到新文件名后 const ext = path.extname(file.originalname); callback(null, file.fieldname + '-' + Date.now() + ext); } }); // 仅处理名为"image"的单个文件字段 const upload = multer({ storage: storage }).single('image'); const uploadavatar = function (req, res) { upload(req, res, function(err) { if(err) { return res.end("Error uploading file." + err); } res.end("File is uploaded"); }); };
问题解决说明
保留原图片扩展名:
- 引入
path模块,通过path.extname(file.originalname)获取上传文件的原始扩展名(如.jpg、.png) - 在生成文件名时将扩展名拼接进去,避免保存后的文件无后缀显示为"file"
- 引入
限制仅允许"image"参数上传:
- 替换
.any('userPhoto')为.single('image'),multer只会处理请求中名为image的文件字段 - 其他如
file这类字段会被直接忽略,彻底避免多文件上传问题 - 若需允许单个
image字段上传多个文件,可改用.array('image', 1)(数字1为最大允许数量,可按需调整)
- 替换
内容的提问来源于stack exchange,提问作者prabhat mohal
相关产品推荐
相关产品推荐

