2017-08-19 4 views
-1

Le concept n'est toujours pas clair pour moi pour le moment. Pour un cas très basique, je peux télécharger un fichier (disons myFile.txt) en utilisant multer, et garder son nom d'origine côté serveur.nodejs multer le téléchargement de fichiers, ce qui se passe les noms de fichiers sont les mêmes à partir de 2 places

const upload = multer({ dest: `${UPLOAD_PATH}/` }); // multer configuration 

Maintenant, une autre personne arrive à télécharger un autre fichier avec le même nom de fichier monFichier.txt dans le même dossier dans le côté serveur. Remplacera-t-il le précédent?

Comment gérez-vous cela normalement? Merci !

Répondre

1

Remplacera-t-il le précédent?

Oui, il remplacera définitivement avec le nouveau one.Here est mon code .Dans ce code si vous utilisez un même nom de fichier à partir de différents endroits ou à partir du même endroit, il ne replaces.It garde les deux fichiers dans le code destination.Server server.js

var express=require('express'); 
var multer=require('multer'); 
var path = require('path') 
var app=express(); 
var ejs = require('ejs') 
app.set('view engine', 'ejs') 
var storage = multer.diskStorage({ 
    destination: function(req, file, callback) { 
     callback(null, './public/uploads') 
    }, 
    filename: function(req, file, callback) { 
     callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)) 
     //callback(null, file.originalname) 
    } 
}) 

app.get('/api/file',function(req,res){ 
res.render('index'); 
}); 
app.post('/api/file', function(req, res) { 
    var upload = multer({ 
     storage: storage}).single('userFile'); 
    upload(req, res, function(err) { 
     console.log("File uploaded"); 
     res.end('File is uploaded') 
    }) 
}) 

app.listen(3000,function(){ 
console.log("working on port 3000"); 
}); 

Si vous observez le code callback(null, file.originalname) cette ligne gardera le nom du fichier d'origine en destination et remplacera le fichier quand il obtient la même name.If vous ne voulez pas utiliser alors callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)). Ce rappel change le nom du fichier dans la destination.

Faire un dossier de vues et de garder ce fichier dans it.ejs code à partir duquel vous pouvez choisir un fichier à télécharger index.ejs

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
    <form id="uploadForm" enctype="multipart/form-data" method="post"> 
     <input type="file" name="userFile" /> 
     <input type="submit" value="Upload File" name="submit"> 
    </form> 
</body> 
</html> 

exécuter le code en tant que nœud server.js .Open le navigateur et tapez http://localhost:3000/api/file .Choisissez une fichier à télécharger et voir le dossier de destination.Heur cela aide pour vous.

+0

ok, donc vous utilisez l'horodatage pour gérer ce cas, ça marche, merci :). J'attends un peu pour voir si les autres ont d'autres moyens. – user3552178

+0

Atleast vous pouvez faire upvote car cela vous aide .... et vous pouvez accepter plus tard en fonction d'autres réponses –