我需要将文件从我的客户端上传到Node服务器(我使用Multer执行此任务)。
要求是如果服务器上已存在同名文件,我需要更改新文件的名称。我使用Node fs.stat来检查是否存在具有相同名称的文件。
我必须做错事,因为fs.stat总是告诉我没有同名的文件,实际上它在那里(我最终用新的文件覆盖旧文件)。
这是代码。
var imagesDirectory = 'images';
var imageDir = '/' + imagesDirectory + '/';
var storageDisk = multer.diskStorage({
destination: imagesDirectory,
filename: function (req, file, callback) {
let uploadedFileName;
fs.stat(imageDir + file.originalname, function(err, stat) {
if (err==null) {
uploadedFileName = Date.now() + '.' + file.originalname;
} else if(err.code == 'ENOENT') {
uploadedFileName = file.originalname;
} else {
console.log('Some other error: ', err.code);
}
callback(null, uploadedFileName)
});
}
})
var uploadImage = multer({ storage: storageDisk, limits: {fileSize: 1000000, files:1}, }).single('imageFile');
router.post('/image', function(req, res) {
uploadImage(req, res, function (err) {
if (err) {
// An error occurred when uploading
console.log(err);
}
// do something to prepare the response and send it back to the client
prepareResponseAndSendItBack(req.file.filename, imageDir, res, err);
})
})
答案 0 :(得分:1)
我相信fs.exists
更适合这项任务。
fs.exists(imageDir + file.originalname, function(exists) {
let uploadedFileName;
if (exists) {
uploadedFileName = Date.now() + '.' + file.originalname;
} else {
uploadedFileName = file.originalname;
}
callback(null, uploadedFileName)
});
还要确保传递文件
的完整路径(或相对于当前文件的路径)