我正在使用節點文件系統保存上傳的圖像,使用while循環檢查現有文件名,遞增++,直到出現唯一文件名。Node.js文件系統 - 保存唯一的文件名
代碼無法正常工作,因爲我的break;
行的位置出現SyntaxError: Illegal break statement
錯誤,以及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;
}
});
}
我認爲這是一個很好的輔助點,但我不知道它是否回答這個問題.... –
添加回答:) – AndyD
優秀的響應,但fs.existsSync()仍然沒有在循環內觸發,當我爲文件名生成了一個隨機數,而不是使用上傳的名稱。 – alyx