2015-11-02 1 views
1

Lorsqu'un utilisateur télécharge une image - j'utilise d'ailleurs un multer - avec un nom qui contient un espace, je veux remplacer les espaces blancs par "-" avant d'enregistrer le nom de fichier ma table Mysql et ensuite renommer le fichier qui a été téléchargé sur le nouveau nom avec le "-". Ceci est mon code. Il renomme et la table Mysql enregistre le nouveau nom avec le trait d'union mais l'image n'est pas téléchargée pour une raison quelconque, il n'y a pas d'erreur même, en fait la requête POST est effectivement réussie.Renommer l'image transférée dans multer en utilisant fs

router.post('/uploadpost', upload.single('image'), function(req, res){ 
var name = req.file.originalname; 
var reName; 
if(/\s/g.test(name)){ 
    reName = name.replace(" ", "-"); 
    fs.rename(req.file.path, reName, function(err){ 
     if(err){ 
      throw err; 
     } 

    }); 
} 
+0

Pourquoi êtes-vous désireux d'utiliser le nom d'origine? Je serais préoccupé par les chemins malveillants .... – mscdex

+0

@mscdex Que suggérez-vous que je fasse? renommer chaque image téléchargée en une chaîne arbitraire? –

+0

Eh bien, actuellement, le stockage sur disque par défaut enregistre sur le disque en utilisant un nom de fichier aléatoire/unique composé de 16 chiffres hexadécimaux. Le nom de fichier (pas le chemin absolu) est disponible sur la propriété 'req.file.filename'. Donc, vous pouvez juste déplacer cela à l'endroit que vous voulez/besoin. Par exemple: 'fs.rename (req.file.path, path.join ('/ mon/upload/stockage', req.file.filename), ...)' – mscdex

Répondre

1

Pourquoi ne pas changer le nom lorsque vous enregistrez le fichier avec Multer? Quelque chose comme ça:

function generateName(){ 
    return 'newname'; 
} 

var storage = multer.diskStorage({ 
    destination: function (req, file, cb) { 
    cb(null, '/tmp/my-uploads') 
    }, 
    filename: function (req, file, cb) { 
    cb(null, generateName()); // generate new name 
    } 
}) 

var upload = multer({ storage: storage }) 

Documentation - https://github.com/expressjs/multer#diskstorage