javascript - Node.js 文件系统 - 保存唯一的文件名

标签 javascript node.js while-loop save

我使用 Node 文件系统保存上传的图像,使用 while 循环检查现有文件名,递增++ 直到有一个唯一的文件名。

代码无效,正在获取 SyntaxError: Illegal break statement我的 break; 放置错误行,以及 while 循环从未正确读取我的 fs.exists()在循环中运行。

我在逻辑上做错了什么吗?有没有更简单的方法来确保 fs.writeFile()不覆盖现有文件?

代码:

  var fileExist = true;
  var fileName = req.files.files[0].name.substr(0, req.files.files[0].name.lastIndexOf('.')) || req.files.files[0].name;
  var fileType = req.files.files[0].name.split('.').pop();
  var fileNumber = 1;

  while (fileExist) {

    fileNumber_str = fileNumber.toString(); 

    var current = fileName + fileNumber_str + '.' + fileType;

    fs.exists( __dirname + "/uploads/" + current, function(exists){

        if (exists) {
            fileNumber++;
        }

        if (!exists) {

            var newPath = __dirname + "/uploads/" + current;
            fs.writeFile(newPath, data, function (err) {
                res.send('saved');
            });

            break;
        }

    });

  }

最佳答案

你是想跳出fs.exists的回调,确实不合法。使用 fs.existsSync 可能更容易

例如:

while (fileExist) {

    fileNumber_str = fileNumber.toString(); 

    var current = fileName + fileNumber_str + '.' + fileType;


    if (fs.existsSync(__dirname + "/uploads/" + current)) {
        fileNumber++;
    } else {
        var newPath = __dirname + "/uploads/" + current;
        fs.writeFile(newPath, data, function (err) {
            res.send('saved');
        });

        break;
    }
}

关于javascript - Node.js 文件系统 - 保存唯一的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948624/

相关文章:

c++ - 为什么这个循环只运行一次?

javascript - 使用具有淡入和淡出效果的 jQuery 更改悬停列表的背景主体图像 + 缩放

javascript - 为什么div计数一直返回0

javascript - 如果没有可见图层,则忽略 OpenLayers 缩放滚动事件

node.js - 在 aws cloudfront 中签名 cookie,无需 key 对(RSA 私钥)

java - 为什么我的 while 进入无限循环?我如何解决它?

javascript - 使用await关键字来模拟同步编程

javascript - 通过键查找获取值并替换为嵌套 json 对象中的第二个 json 值

javascript - 如何在nodejs中循环异步函数?

php - While循环基于关联数组php?