2015-09-18 1 views
4

retenue nom de fichier d'image et l'extension après le chargement dans Node.js (express) en utilisant multer

<!doctype html> 
 
<html> 
 

 
    <body> 
 
     <form action="/upload" method="POST" enctype="multipart/form-data"> 
 
      <input type='file' name="image"> 
 
      <br> 
 
      <input type="submit" value="submit"> 
 
     </form> 
 
    </body> 
 

 
</html>

var express = require('express'); 
var router = express.Router(); 
var multer = require('multer'); 
var upload = multer({ dest: 'uploads/', 
    filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()) 
} }); 

router.post('/upload', upload.single('image'), function(req, res){ 
    res.send("Uploaded"); 
}); 
module.exports = router; 

j'ai ce code de base qui télécharge une image en utilisant le module multer. Mais lorsque le fichier est téléchargé, il génère un nom aléatoire et se débarrasse même de l'extension de fichier. Il dit simplement taper 'fichier'. Alors, comment puis-je conserver le nom de l'image avec l'extension.

+0

FWIW vous ne voulez pas compter sur les extensions de fichier pour le téléchargement de l'utilisateur arbitraires. Vous pourriez envisager d'utiliser un module comme ['mmmagic'] (https://github.com/mscdex/mmmagic) qui inspecte le contenu du fichier pour déterminer le type de fichier. – mscdex

Répondre

8

lorsque vous téléchargez le fichier (en utilisant la méthode multer.single), vous obtenez des données de fichier dans

req.file 

il est l'objet qui ont des propriétés OriginalName, mimetype, chemin et autres. Vérifiez docs pour tous: https://github.com/expressjs/multer

Mais ne faites pas confiance à mimetype.

Comment conserver le nom et l'extension de l'image?

a) renommer le fichier téléchargé à l'aide des données dans req.file (ne l'aime pas)

b) les données de fichiers (magasin de req.file) dans db

modifier à propos de renommage: lorsque tous les fichiers téléchargés va dans un répertoire, et vous changez les noms en orginal, il peut y avoir des conflits - il peut exister des fichiers avec les mêmes noms. Par conséquent, lorsque vous choisissez de cette façon, vous devez déplacer les fichiers dans des répertoires distincts.

chose suivante: les noms de fichiers Orginal peuvent avoir des mots insultants ou non caractères standard (je ne sais pas si elle peut être la sécurité isue) ou être très longue, etc.

ok, comment renommer? nous pouvons utiliser colis express fs https://nodejs.org/api/fs.html et méthodes:

fs.rename(oldPath, newPath, callback) 

ou

fs.renameSync(oldPath, newPath) 
+0

Ok, merci pour votre réponse. Je reçois maintenant plus de choses. J'aime l'idée de stocker le nom original d'images dans un db mais juste par curiosité puisque je suis nouveau à ceci, comment renommez-vous? req.file.originalname =? –

+0

je modifie ma réponse pour prendre en compte votre commentaire –

+0

méthode de renommer peut également déplacer des fichiers à diferent répertoires –