在你提供的代码中,确实存在一个问题,导致图片被写入两次,但其中一次可能是不必要的或者错误的。问题出在文件写入逻辑上。具体来说,问题出现在以下部分:
javascript
fs.readFile(req.files[0].path, function (err, data) {
console.log(data)
fs.writeFile(req.files[0].path+extName, data, function (err) {
...
});
});
这里,你首先读取了上传的文件,然后又将其写入到相同的路径,但是添加了文件扩展名。这意味着:
文件首先被Multer上传到upload/目录下,此时的文件名可能不包含扩展名。
然后,你读取这个文件,并尝试将其写入到相同的路径,但是文件名后面加上了扩展名。
这实际上导致了两个动作:
文件被上传到服务器。
文件被再次写入,这次带上了扩展名。
如果你的目的是确保文件名包含扩展名,你应该在文件第一次被写入时就指定正确的文件名,而不是读取后再写入。你可以通过修改Multer的配置来实现这一点,例如:
var upload = multer({
dest: 'upload/',
filename: function (req, file, cb) {
var extName = '';
switch(file.mimetype) {
case 'image/pjpeg':
case 'image/jpeg':
extName = '.jpg';
break;
case 'image/png':
case 'image/x-png':
extName = '.png';
break;
default:
extName = '';
}
cb(null, file.fieldname + '-' + Date.now() + extName);
}
});
这样,文件在第一次被写入时就会包含正确的扩展名,无需再次读取和写入。