multer的NodeJS文件上传,会发生什么情况的文件名是从2位相同
这个概念还不清楚,我呢。对于一个非常基本的情况下,我可以上传一个文件(说MYFILE.TXT)使用multer,而在服务器端保留其原来的名称。
const upload = multer({ dest: `${UPLOAD_PATH}/` }); // multer configuration
现在,另一个人碰巧有相同的文件名MYFILE.TXT不同的文件上传到服务器端的同一个文件夹。它会覆盖前一个?
通常你如何管理呢?谢谢 !
回答如下:它会覆盖前一个?
是的,它肯定会与新one.Here取而代之的是我的代码。在此代码,如果你从不同的地点或从它不会replaces.It保持相同的位置无论是在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");
});
如果您发现该代码callback(null, file.originalname)
这条线将保持原来的文件名中的目的地,当它让你不想要这个,然后使用callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
.This回调相同的名字。如果改变目标文件的名称将替换该文件。
做一个视图文件夹,并保持it.ejs代码文件,您可以从中选择要上传的文件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>
运行该代码为节点server.js
.Open浏览器并输入http://localhost:3000/api/file
.Choose要上传的文件,看看目标folder.Hope这可以帮助你。