123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- 'use strict';
- const szjcomoutils = require('szjcomo-utils');
- const fs = require('fs');
- const path = require('path');
- const xml2js = require('xml2js');
- const crypto = require('crypto');
- const BAR = Symbol('Application#szjcomo');
- const mime = require('mime');
- /**
- * [mkdir 创建目录]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} dirname [description]
- * @param {Object} options [description]
- * @return {[type]} [description]
- */
- const mkdir = function(dirpath,options = {recursive:true}) {
- if (fs.existsSync(dirpath)) {
- return true;
- } else {
- return fs.mkdirSync(dirpath,options);
- }
- }
- /**
- * [deleteFile 删除文件]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} filename [description]
- * @return {[type]} [description]
- */
- const deleteFile = function(filename) {
- if (!fs.existsSync(filename)) {
- return true;
- } else {
- fs.unlinkSync(filename);
- return true;
- }
- }
- /**
- * [fileSize 获取文件或文件夹大小]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} filepath [description]
- * @return {[type]} [description]
- */
- const fileSize = function(filepath) {
- if (!fs.existsSync(filepath)) {
- return 0;
- } else {
- return fs.statSync(filepath).size;
- }
- }
- /**
- * [parseXml xml解析]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} xmlContent [description]
- * @return {[type]} [description]
- */
- const parseXml = function(xmlContent) {
- return new Promise((resolve, reject) => {
- const parseString = xml2js.parseString;
- parseString(xmlContent, { explicitArray: false }, (err, json) => {
- if (json) {
- resolve(json.xml);
- } else {
- reject(err);
- }
- });
- });
- }
- /**
- * [createXml 对象转xml]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} obj [description]
- * @return {[type]} [description]
- */
- const createXml = function(obj) {
- const builder = new xml2js.Builder({
- rootName: 'xml',
- headless: true,
- cdata: true,
- });
- return builder.buildObject(obj);
- }
- /**
- * [MD5 原生nodejs的md5算法]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} str [description]
- */
- const MD5 = function(str) {
- return crypto.createHash('md5').update(str).digest('hex').toLowerCase();
- }
- /**
- * [SHA1 获取加密的sha1的值 基于nodejs]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} str [description]
- */
- const SHA1 = function(str) {
- return crypto.createHash('sha1').update(str).digest('hex').toLowerCase();
- }
- /**
- * [FileMD5 文件的md5值]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} filepath [description]
- */
- const FileMD5 = function(filename) {
- if(!fs.existsSync(filename)) throw new Error(`${filename}不存在`);
- var buffer = fs.readFileSync(filename);
- return crypto.createHash('md5').update(buffer).digest('hex').toLowerCase();
- }
- /**
- * [FileSHA1 文件的sha1值]
- * @author szjcomo
- * @createTime 2020-09-04
- * @param {[type]} filename [description]
- */
- const FileSHA1 = function(filename) {
- if(!fs.existsSync(filename)) throw new Error(`${filename}不存在`);
- var buffer = fs.readFileSync(filename);
- return crypto.createHash('sha1').update(buffer).digest('hex').toLowerCase();
- }
- /**
- * [deleteFolder 删除文件夹]
- * @author szjcomo
- * @date 2020-11-10
- * @param {[type]} folder_path [description]
- * @return {[type]} [description]
- */
- const deleteFolder = function(folder_path) {
- let files = [];
- if( fs.existsSync(folder_path) ) {
- files = fs.readdirSync(folder_path);
- files.forEach(function(file,index){
- let curPath = path.join(folder_path,file);
- if(fs.statSync(curPath).isDirectory()) { // recurse
- deleteFolder(curPath);
- } else { // delete file
- fs.unlinkSync(curPath);
- }
- });
- fs.rmdirSync(folder_path);
- }
- }
- /**
- * [FileToBase64 文件转base64]
- * @author szjcomo
- * @date 2020-11-11
- * @param {[type]} filename [description]
- */
- const FileToBase64 = function(filename) {
- if(!fs.existsSync(filename)) throw new Error('文件不存在');
- let bitmap = fs.readFileSync(filename);
- let data = Buffer.from(bitmap, 'binary').toString("base64");
- let base64 = 'data:' + mime.getType(filename) + ';base64,' + data;
- return base64;
- }
- /**
- * [getBase64FileType 获取base64文件的类型]
- * @author szjcomo
- * @date 2020-11-11
- * @param {[type]} filetype [description]
- * @return {[type]} [description]
- */
- const getBase64FileType = function(filetype) {
- let result;
- let maps = {
- 'data:application/msword;base64,':'.doc',
- 'data:application/vnd.openxmlformats-officedocument.wordprocessingml.document;base64,':'.docx',
- 'data:application/vnd.ms-excel;base64,':'.xls',
- 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,':'.xlsx',
- 'data:application/pdf;base64,':'.pdf',
- 'data:application/vnd.ms-powerpoint;base64,':'.ppt',
- 'data:application/vnd.openxmlformats-officedocument.presentationml.presentation;base64,':'.pptx',
- 'data:text/plain;base64,':'.txt',
- 'data:image/png;base64,':'.png',
- 'data:image/jpeg;base64,':'.jpg',
- 'data:image/svg+xml;base64,':'.svg',
- 'data:image/x-icon;base64,':'.ico',
- 'data:image/bmp;base64,':'.bmp',
- 'data:application/json;base64,':'.json',
- 'data:text/markdown;base64,':'.md',
- 'data:application/javascript;base64,':'.js'
- };
- return maps[filetype]?maps[filetype]:null;
- }
- /**
- * [Base64ToFile base64字符串转文件]
- * @author szjcomo
- * @date 2020-11-11
- * @param {[type]} base64 [description]
- * @param {[type]} savePath [description]
- * @param {[type]} filename [description]
- */
- const Base64ToFile = function(base64,savePath,filename = null) {
- let reg = /data:(.*);base64,/;
- let result = reg.exec(base64);
- if(!result || !result[0]) throw new Error('不是标准的base64格式');
- if(!savePath) throw new Error('文件保存路径参数未设置,请检查');
- if(!filename) {
- let ext = getBase64FileType(result[0]);
- if(!ext) throw new Error('未知的文件类型');
- filename = `${szjcomoutils.date('YmdHis')}${szjcomoutils.mt_rand(100000,999999)}${ext}`;
- }
- let filepath = path.join(savePath,filename);
- mkdir(savePath);
- let filedata = base64.replace(/^data:(.*);base64,/,'');
- let buffer = Buffer.from(filedata, 'base64');
- fs.writeFileSync(filepath,buffer);
- if(fs.existsSync(filepath)) return filepath;
- return false;
- }
- /**
- * [exports 扩展app对象]
- * @type {Object}
- */
- module.exports = {
- /**
- * [szjcomo 获取对象]
- * @author szjcomo
- * @createTime 2020-09-04
- * @return {[type]} [description]
- */
- get szjcomo() {
- if (!this[BAR]) {
- this[BAR] = Object.assign(szjcomoutils,{
- MD5:MD5,
- SHA1:SHA1,
- FileMD5:FileMD5,
- FileSHA1:FileSHA1,
- deleteFile:deleteFile,
- mkdir:mkdir,
- parseXml:parseXml,
- createXml:createXml,
- deleteFolder:deleteFolder,
- FileSize:fileSize,
- FileToBase64:FileToBase64,
- Base64ToFile:Base64ToFile
- });
- }
- return this[BAR];
- }
- };
|