nodejs服務端:文件重命名、文件複製、文件移動
在nodejs服務端對文件進行操作一般都使用到fs模塊,今天我也在項目中使用到了,之前一直沒機會寫文檔,現在我做一個小總結!
安裝必要模塊
npm i fs -s
文件重命名demo
var fs = require('fs')
fs.rename(`upload/${file.filename}`, `upload/${newname}`, (err) => {
if (err) {
console.log('err:' + err);
} else {
console.log('修改文件名成功');
}
});
文件拷貝demo
var floder_path = 'one'
if (order.print_type != '黑白A4單面') {
floder_path = 'two'
}
if (order.print_num > 1) {
for (var i = 1; i <= order.print_num; i++) {
fs.copyFile(`upload/${newname}`, `upload/${floder_path}/第${i}份-共${order.print_num}份-${newname}`, function (err) {
if (err) console.log('something wrong was happened')
else console.log('copy file succeed');
})
}
} else {
fs.copyFile(`upload/${newname}`, `upload/${floder_path}/${newname}`, function (err) {
if (err) console.log('something wrong was happened')
else console.log('copy file succeed');
})
}
以上是從我的項目中截取的兩個代碼片段,官方給出的用法如下:
FS模塊用法
fs.rename(oldPath, newPath, callback)
異步地將 oldPath 上的文件重命名爲 newPath 提供的路徑名。 如果 newPath 已存在,則覆蓋它。 除了可能的異常,完成回調沒有其他參數。
fs.rename('舊文件.txt', '新文件.txt', (err) => {
if (err) throw err;
console.log('重命名完成');
});
fs.copyFile(src, dest[, flags], callback)
異步地將 src 拷貝到 dest。 默認情況下,如果 dest 已經存在,則覆蓋它。 除了可能的異常,回調函數沒有其他參數。 Node.js 不保證拷貝操作的原子性。 如果在打開目標文件用於寫入後發生錯誤,則 Node.js 將嘗試刪除目標文件。
flags 是一個可選的整數,指定拷貝操作的行爲。 可以創建由兩個或更多個值按位或組成的掩碼(比如 fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE)。
- fs.constants.COPYFILE_EXCL - 如果 dest 已存在,則拷貝操作將失敗。
- fs.constants.COPYFILE_FICLONE -
拷貝操作將嘗試創建寫時拷貝(copy-on-write)鏈接。如果平臺不支持寫時拷貝,則使用後備的拷貝機制。 - fs.constants.COPYFILE_FICLONE_FORCE -
拷貝操作將嘗試創建寫時拷貝鏈接。如果平臺不支持寫時拷貝,則拷貝操作將失敗。
const fs = require('fs');
// 默認情況下將創建或覆蓋目標文件。
fs.copyFile('源文件.txt', '目標文件.txt', (err) => {
if (err) throw err;
console.log('源文件已拷貝到目標文件');
});
如果第三個參數是數字,則它指定 flags:
const fs = require('fs');
const { COPYFILE_EXCL } = fs.constants;
// 通過使用 COPYFILE_EXCL,如果目標文件存在,則操作將失敗。
fs.copyFile('源文件.txt', '目標文件.txt', COPYFILE_EXCL, callback);