使用Multer上传NodeJs中的文件,如果文件已存在则更改名称

时间:2016-04-15 13:23:01

标签: node.js multer

我需要将文件从我的客户端上传到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);
            })
        })

1 个答案:

答案 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)
});

还要确保传递文件

的完整路径(或相对于当前文件的路径)