概述
node文件处理
const fs = require("fs");
const path = require("path");
const archiver = require('archiver');
const compressing = require("compressing");
/**
* 读取目录及文件
* @param {*} screenZipPath 公网下载的zip文件夹
*/
function dirHandler() {
const unzipDir = path.resolve(__dirname, '../screensTemp');
delDir(unzipDir);
console.log('----------------
已删除备份文件
----------------');
dataVUncompress(unzipDir).then((pathes) => {
console.log('----------------
全部文件处理完成
----------------');
dataVCompress1(unzipDir, pathes);
}).catch(err => console.error('解压报错了', err));
}
/**
* 删除临时文件
* @param {string} delPath
*/
function delDir(delPath) {
let files = [];
if (fs.existsSync(delPath)) {
files = fs.readdirSync(delPath);
files.forEach(file => {
let curPath = path.join(delPath, file);
if (fs.statSync(curPath).isDirectory()) delDir(curPath); //递归删除文件夹
else fs.unlinkSync(curPath); //删除文件
});
fs.rmdirSync(delPath);
}
}
/**
* 解压下载的打包文件
* @param unzipDir 解压后的文件目录
*/
function dataVUncompress(unzipDir) {
const screenZipPath = path.resolve(__dirname, '../screensDownload');
try {
fs.accessSync(unzipDir, fs.constants.F_OK);
} catch (err) {
fs.mkdirSync(unzipDir);
}
const files = fs.readdirSync(screenZipPath);
return new Promise((resolve, reject) => {
if (files && files.length) {
const promises = [];
for (let i = 0; i < files.length; i++) {
const file = files[i];
if (/zip/.test(file)) {
promises.push(new Promise(async (res, rej) => {
try {
const fileName = path.basename(file).substring(0, path.basename(file).lastIndexOf('.'));
await compressing.zip.uncompress(path.resolve(screenZipPath, file), unzipDir);
const config = JSON.parse(fs.readFileSync(path.join(unzipDir, fileName, 'config.json'), { encoding: "UTF-8" }));
console.log(`文件 【 ${fileName} 】 解压处理完成!`);
res({ path: fileName, _path: config.onlineId + '' });
} catch (error) {
rej(error)
}
// try {
//
const fileName = path.basename(file).substring(0, path.basename(file).lastIndexOf('.'));
//
await compressing.zip.uncompress(path.resolve(screenZipPath, file), unzipDir);
//
const config = JSON.parse(fs.readFileSync(path.join(unzipDir, fileName, 'config.json'), { encoding: "UTF-8" }));
//
fs.renameSync(path.resolve(unzipDir, fileName), path.resolve(unzipDir, config.onlineId + ''));
//
console.log(`文件${fileName}处理完成!`);
//
res(config.onlineId + '');
// } catch (error) {
//
rej(error)
// }
}))
}
}
Promise.all(promises).then((pathes) => resolve(pathes)).catch(err => reject(err))
} else resolve();
})
}
/**
* 压缩处理好的文件
* @param {*} unzipDir
*/
function dataVCompress(unzipDir) {
const zipPath = path.resolve(unzipDir, '../', 'dataScreens.zip')
compressing.zip.compressDir(path.join(unzipDir, './'), zipPath)
.then(() => console.log(`Tip: 所有文件压缩成功,已压缩至【${zipPath}】`))
.catch(err => console.error('Tip: 压缩报错', err));
}
/**
* 压缩处理好的文件
* @param {*} unzipDir
*/
function dataVCompress1(unzipDir, pathes) {
const zipPath = path.resolve(unzipDir, 'dataVScreens.zip')
var output = fs.createWriteStream(zipPath);
var archive = archiver('zip', { zlib: { level: 9 } });
archive.on('error', (err) => { throw err });
output.on('close', () => {
console.log(`--------- ---------压缩完毕--------- ---------n文件路径位于:${zipPath}n生成文件大小:${(archive.pointer() / 1024 / 1024).toFixed(1)}MB`);
});
archive.pipe(output);
for (let i = 0; i < pathes.length; i++) {
const obj = pathes[i];
fs.renameSync(path.resolve(unzipDir, obj.path), path.resolve(unzipDir, obj._path));
// 如果destpath传递了false,那么档案中的数据块的路径将被设置为根目录
archive.directory(path.resolve(unzipDir, obj._path), obj._path);
console.log(`第${(i + 1).toString().padStart(2, '0')}个文件【${obj.path}】改名为【${obj._path}】,正在压缩中 ~ ~ ~ `);
}
archive.finalize();
}
dirHandler();
最后
以上就是瘦瘦大叔为你收集整理的dataV本地一键部署的全部内容,希望文章能够帮你解决dataV本地一键部署所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复