使用Multer在NodeJs中上传文件,如果文件已经存在,则更改名称

我需要从我的客户端上传文件到节点服务器(我使用Multer执行此任务)。

要求是如果服务器上已经存在一个同名的文件,我需要更改新文件的名称。 我使用Node fs.stat来检查是否存在具有相同名称的文件。

我一定是做错了,因为fs.stat总是告诉我没有同名的文件,实际上它是在那里的(我最终用新文件覆盖旧文件)。

这是代码。

var imagesDirectory = 'images'; var imageDir = '/' + imagesDirectory + '/'; var storageDisk = multer.diskStorage({ destination: imagesDirectory, filename: function (req, file, callback) { let uploadedFileName; fs.stat(imageDir + file.originalname, function(err, stat) { if (err==null) { uploadedFileName = Date.now() + '.' + file.originalname; } else if(err.code == 'ENOENT') { uploadedFileName = file.originalname; } else { console.log('Some other error: ', err.code); } callback(null, uploadedFileName) }); } }) var uploadImage = multer({ storage: storageDisk, limits: {fileSize: 1000000, files:1}, }).single('imageFile'); router.post('/image', function(req, res) { uploadImage(req, res, function (err) { if (err) { // An error occurred when uploading console.log(err); } // do something to prepare the response and send it back to the client prepareResponseAndSendItBack(req.file.filename, imageDir, res, err); }) }) 

我相信fs.exists更适合这个任务。

 fs.exists(imageDir + file.originalname, function(exists) { let uploadedFileName; if (exists) { uploadedFileName = Date.now() + '.' + file.originalname; } else { uploadedFileName = file.originalname; } callback(null, uploadedFileName) }); 

另外请确保您传递文件的完整path(或相对于当前文件的path)