如何防止sailsjsfile upload覆盖

我想在sails.js中创build一个file upload器,我已经跟随了文档,并使用saveAs函数,如下所示:

create: function(req, res){ var filename = req.file('file')._files[0].stream.filename; var file = req.file('file'); file.upload({dirname: '../../assets/uploads/', saveAs: function (__newFileStream,cb) { cb(null, filename); }}, function(err, uploadedFiles){ if(err){ return res.json(err); } Archivo.create({nombre: uploadedFiles[0].filename, url: '/uploads/' + uploadedFiles[0].filename}).exec(function(err, uploadedFile){ if(err){ return res.json(err); } return res.json(uploadedFile); }); }); }, 

创build控制器将带有文件名的file upload到资产文件夹,然后创buildArchivologging

我的问题是,我不想重写文件,如果我再次上传,例如,如果我上传一个名为image.jpg的文件,我再次上传我想第二次重命名为图像(1).jpg

有人知道该怎么做?

以下内容联合使用时,会根据上传的文件名为您提供与上传文件相匹配的文件数量。 它将使用正则expression式匹配基于这个模板图像(1).jpg。

所以,如果你上传image.jpg它会看你的目录,并find所有匹配的文件,以下所有将匹配。

 image.jpg image(1).jpg image(2).jpg image(3).jpg image(4).jpg 

所以系统会返回这些文件让你知道你有5匹配。 因此,您现在可以使用该号码重命名您在图像(5).jpg上上传的文件。

这应该让你开始。 它使用NPM fs-finder库。

 var Finder = require('fs-finder');, filename = req.file('file')._files[0].stream.filename, directory = '../../assets/uploads/', filePreFix = filename.split('.')[0].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), fileExtension = filename.split('.')[1].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')), var NumberOfMatchingFiles = Finder .in(direcotry) .findFiles( filePreFix + '(\([0-9]*\))*\' + fileExtension ).length 

就像我说的,这只会让你开始。 你可以有和问题,你删除图像(2).jpg,因此,你将只有4个文件,并尝试命名您的新上传的文件作为图像(4).jpg将写入文件。 你可以检查一下fs-finder返回的文件列表。