zoukankan      html  css  js  c++  java
  • electron+vue中使用nodeJs的fs模块以及上传文件

    import Form from "form-data/lib/form_data" //在electron上传文件中添加node form-data模块
    const fs = require('fs');
    const path = require('path');
    const archiver = require('archiver');
    

    秒级时间戳、毫秒级时间戳、日期对象 格式化时间

    dateFormat(date, fmt = 'yyyy-MM-dd hh:mm:ss') {
        let type = Object.prototype.toString.call(date);
        if (type !== '[object Number]' && type !== '[object Date]') return;
        if (type === '[object Number]') date = new Date(Number(date).toString().length === 10 ? date * 1000 : date);
    
        let o = {
            'M+': date.getMonth() + 1, //月份
            'd+': date.getDate(), //日
            'h+': date.getHours(), //小时
            'm+': date.getMinutes(), //分
            's+': date.getSeconds(), //秒
            'q+': Math.floor((date.getMonth() + 3) / 3), //季度
            S: date.getMilliseconds() //毫秒
        };
        if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
        for (let k in o) if (new RegExp('(' + k + ')').test(fmt)) fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
        return fmt;
    }
    
    定义变量
                fileName: '', //文件名称C
                dirName:'C:\swRtcSdkLog',//总路径
                todayTime:dateFormat(new Date(), 'yyyy-MM-dd'),//今天时间
                spaceTime: 18000000,//间隔时间
    

    创建文件夹

                createFile() {
                fs.exists(this.dirName, exists => {
                    if (!exists) {
                        fs.mkdirSync(this.dirName);
                    }
                    // 文件夹存在,创建文件
                    this.todayTime = dateFormat(new Date(), 'yyyy-MM-dd');
                    this.fileName = path.join(this.dirName, `\${this.todayTime}_${this.lesson_id}_lesson.log`);
                    this.createLogFile();
                });
            },
    

    创建文件

            createLogFile() {
                fs.access(this.fileName, fs.constants.F_OK, err => {
                    if (err) {
                        fs.writeFile(this.fileName, '', 'utf8', err => {
                            if (err) {
                                console.warn('创建文件失败');
                            } else {
                                console.warn('创建文件成功');
                                //写入日志或者文件
                            }
                        });
                    } else {
                        console.log('文件存在');
                        //写入日志或者文件
                    }
                });
            },
    

    遍历日志文件夹删除前10小时的文件

    foldForEach(){
                let dirList = fs.readdirSync(this.dirName);  
                dirList.forEach((item,index)=>{
                    console.log(item);
                    let statObj = fs.statSync(`${this.dirName}\${item}`);
                    if(statObj.isDirectory()){
                        this.removeDir(item);
                    }else{
                        const time = new Date(item.split('_')[0]).getTime();
                        const dateTime = new Date().getTime();
                        if(dateTime-time >= this.spaceTime && item.split('.')[1] != 'zip'){
                            fs.unlinkSync(`${this.dirName}\${item}`);
                        }
                    }
                }) 
            },
    

    删除文件夹

           removeDir(dir){
                let dirList = fs.readdirSync(`${this.dirName}\${dir}`);
                console.log(dir)
                for(let i = 0; i<dirList.length;i++){
                    fs.unlinkSync(`${this.dirName}\${dir}\${dirList[i]}`);
                }
                fs.rmdirSync(`${this.dirName}\${dir}`);
            },
    

    将多个文件压缩成一个压缩包

           dirToZip(){
                let dirList = fs.readdirSync(this.dirName);
                const output = fs.createWriteStream(`${this.dirName}\xxx.zip`);
                const archive = archiver('zip');
                archive.pipe(output);
                dirList.forEach(item=>{
                    if(item.split('.')[1] != 'zip'){
                        // console.error(`${this.dirName}\${item}`)
                        archive.append(fs.createReadStream(`${this.dirName}\${item}`),{name:`${this.dirName}\${item}`}) 
                    }  
                })
                archive.finalize();
                output.on('close',()=>{
                    this.uploadFile();
                })
            },
    

    上传文件

          uploadFile(e) {
                const form = new Form();
                const fileStream = fs.createReadStream(`${this.dirName}\xxxx.zip`);  
                form.append('file',fileStream)
                form.submit('接口',(err,res)=>{
                    if(res.statusCode == 200){
                        console.log('上传成功')
                    }
                })
            },
    
  • 相关阅读:
    Pearls POJ 1260 DP
    The Cow Lexicon DP
    矩形嵌套
    POJ 3061 Subsequence 尺取
    动物统计加强版 Trie 树
    codevs 1422 河城荷取
    cogs 944. [東方S3] 藤原妹红
    codevs 2830 蓬莱山辉夜
    cogs 998. [東方S2] 帕秋莉·诺蕾姬
    cogs 920. [東方S1] 琪露诺
  • 原文地址:https://www.cnblogs.com/douge/p/14312381.html
Copyright © 2011-2022 走看看