2015-05-11 3 views
1

я пытаюсь сделать файл загрузчиком в sails.js, я следовал документы и использовать функцию SAVEAS как это:как предотвратить переопределение загрузки файла sailsjs

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); 
     }); 

    }); 
}, 

создавание контроллер загружает файл с именем файла в папку с ресурсами, а затем создает запись Archivo

моя проблема в том, что я не хочу переопределять файл, если я загружу его снова, например, если я загружу файл с именем image.jpg и i загрузите его снова. Я хочу, чтобы второй раз переименовал его в изображение (1) .jpg

Кто-то знает, как это сделать?

ответ

1

Следующие при совместном использовании предоставят вам количество файлов, соответствующих тому, которое вы загружаете, на основе загружаемого имени файла. Он будет использовать регулярное выражение для соответствия на основе этого шаблона (1) .jpg.

Так что если вы загружаете image.jpg, то он будет выглядеть в вашем каталоге и найти все файлы, которые соответствуют всем перечисленным ниже.

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

Таким образом, система вернет эти файлы, сообщив вам, что у вас есть 5 подходящих. Таким образом, вы можете использовать этот номер, чтобы переименовать файл, загружаемый на изображение (5) .jpg.

Это должно только начать работать. Он использует библиотеку fs-finder для NPM.

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.

+0

Спасибо, я использовал fs-finder, единственное, что я должен был изменить имя загружаемого файла, чтобы он соответствовал файловому файлу, поскольку, если вы загружаете файл с пробелами в имени, этот код принимает его как разный –

Смежные вопросы