UNPKG

fa-comm

Version:
146 lines (137 loc) 3.9 kB
const path = require('path'); const fs = require('fs'); const crypto = require('crypto'); const archiver = require('archiver'); /** * 同步创建文件夹,可递归创建 * @param {String} dir 需要创建的文件夹路径 * @returns */ const mkdirSync = (dir) => { if (fs.existsSync(dir)) { return true; } else { if (mkdirSync(path.dirname(dir))) { fs.mkdirSync(dir); return true; } } }; exports.mkdirSync = mkdirSync; /** * 创建空白文件 * @param {String} file 文件路径 */ const mkfileSync = (file) => { if (!fs.existsSync(file)) { const _path = path.dirname(file); mkdirSync(_path); fs.writeFileSync(file, ''); } }; exports.mkfileSync = mkfileSync; /** * 递归删除文件夹 */ var deleteFolderRecursive = function (path) { if (fs.existsSync(path)) { fs.readdirSync(path).forEach(function (file) { var curPath = path + "/" + file; if (fs.statSync(curPath).isDirectory()) { // recurse deleteFolderRecursive(curPath); } else { // delete file fs.unlinkSync(curPath); } }); fs.rmdirSync(path); } }; exports.unlinkSync = exports.deleteFolderRecursive = deleteFolderRecursive; /** * 递归获取文件名 * @param {String} dir * @returns */ function findfilesSync(dir) { let result = []; function finder(_path) { let files = fs.readdirSync(_path); files.forEach((val, index) => { let fPath = path.join(_path, val); let stats = fs.statSync(fPath); if (stats.isDirectory()) finder(fPath); if (stats.isFile()) result.push(fPath); }); } finder(dir); return result; } exports.findfilesSync = exports.statSync = findfilesSync; /** * 获取文件md5 * @param {*} file * @returns */ function md5(file) { return new Promise(function (resolve, reject) { let stream = fs.createReadStream(file); let fsHash = crypto.createHash('md5'); stream.on('data', function (d) { fsHash.update(d); }); stream.on('end', function () { let md5 = fsHash.digest('hex'); resolve(md5); }); }); } exports.md5 = md5; /** * 将字节单位转换成最直观的单位 * @param {Int} bytes 字节单位的值 */ function formatSize(bytes) { if (isNaN(bytes)) { return ''; } var symbols = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; var exp = Math.floor(Math.log(bytes) / Math.log(2)); if (exp < 1) { exp = 0; } var i = Math.floor(exp / 10); bytes = bytes / Math.pow(2, 10 * i); if (bytes.toString().length > bytes.toFixed(2).toString().length) { bytes = bytes.toFixed(2); } return bytes + ' ' + symbols[i]; } exports.formatSize = formatSize; /** * 将文件夹打包压缩成zip * @param {Array<String>} files 被打包的文件全路径 * @param {String} filepath 被打包的文件夹 * @param {String} filename 打包压缩后的文件名全路径,如:/xxx.zip * @returns */ function zip(filepath, filename) { return new Promise(function (resolve, reject) { let output = fs.createWriteStream(filename); let archive = archiver('zip', { zlib: { level: 9 } }); output.on('close', function () { resolve(); }); archive.on('warning', function (err) { reject(err); }); archive.on('error', function (err) { reject(err); }); archive.pipe(output); archive.directory(filepath, false); archive.finalize(); }); } exports.zip = zip;