NodeJS 文件操作封装 ②①


                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

前言

  1. Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。
  2. Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的JS解释,但是Node之父 Ryan Dahl在这里插入图片描述把这V8搬到了服务器上,用于做服务器的软件。

导入模块

const fs = require("fs");
const path = require('path')
const http = require('http')
const request = require('request')

创建文件

// 创建文件
function createDir (createPath) => {
    
    
        const savePath = path.join(__dirname, `/${
      
      createPath}`)
        return new Promise(resolve => {
    
    
            fs.mkdir(savePath, (err) => {
    
    
                if (err && err.code === "EEXIST") {
    
    
                    console.log("目录已经存在...")
                    resolve(true);
                } else {
    
    
                    console.log("目录创建成功...")
                }
            })
        })
    },

递归删除文件&文件夹

// 删除文件
function deleteFile(deletePath) {
    
    
    const savePath = deletePath
    return new Promise(resolve => {
    
    
        try {
    
    
            let fileDirs = [];
            // 同步检查给定路径中是​​否已存在文件
            if (fs.existsSync(savePath)) {
    
    
                // 是否是文件夹
                if (fs.statSync(savePath).isDirectory()) {
    
    
                    // 同步读取给定目录的内容。该方法返回一个数组
                    fileDirs = fs.readdirSync(savePath);
                    fileDirs.forEach(fileName => {
    
    
                        const temPath = `${
      
      savePath}/${
      
      fileName}`
                        //异步返回有关给定文件路径的信息。返回的fs.Stat对象具有多个字段和方法,以获取有关文件的更多详细信息。
                        if (fs.statSync(temPath).isDirectory()) {
    
    
                            deleteFile(temPath); // 递归删除目录
                        } else {
    
    
                            // fs.unlinkSync(temPath); //删除文件
                            fs.rmSync(temPath); //从文件系统中同步删除文件或符号链接
                        }
                    })
                    fs.rmdirSync(savePath); //删除目录
                } else {
    
    
                    //异步返回有关给定文件路径的信息。返回的fs.Stat对象具有多个字段和方法,以获取有关文件的更多详细信息。
                    fs.rmSync(savePath) //给定路径下同步删除文件
                }
            }
            resolve('删除文件成功!');
        } catch {
    
    
            resolve('删除文件失败!');
        }
    })
}

下载写入图片

// 下载写入图片
function downAndSaveImages (imageUrl, savePath, callback)  {
    
    
    let fileName;
    if (imageUrl !== null && imageUrl.trim() !== '') {
    
    
        fileName = imageUrl?.split("/").pop();
    } else {
    
    
        fileName = 'https://img10.360buyimg.com/n7/jfs/t1/171353/9/37342/60961/6444f803F94c1aeb3/1babdae3121fdbac.jpg'.split("/").pop();
    }
    const savePath1 = path.join(__dirname, `/${
      
      savePath}`)
    const process = fs.createWriteStream(savePath1 + `/${
      
      fileName}`);

    request({
    
    
        url: (imageUrl !== null && imageUrl.trim() !== '') ? imageUrl : 'https://img10.360buyimg.com/n7/jfs/t1/171353/9/37342/60961/6444f803F94c1aeb3/1babdae3121fdbac.jpg',
        timeout: 5000
    }).pipe(process);

    process.on("finish", () => {
    
    
        callback?.(`${
      
      fileName} 下载成功~`)
        // console.log(`${fileName} 下载成功~`);
        process.close()
    });
    process.on("error", err => {
    
    
        callback?.(`${
      
      fileName} 下载失败~`, new Error('❌'))
    });
}

根据URL路劲返回Base64图片链接

//#region 返回Base64数据
imgToBase64: (imageUrl, callback) => {
    
    
    http.get(imageUrl, function (res) {
    
    
        let chunks = [];
        let size = 0;
        res.on('data', function (chunk) {
    
    
            chunks.push(chunk);
            size += chunk.length;  //累加缓冲数据的长度
        });
        res.on('end', function (err) {
    
    
            let data = Buffer.concat(chunks, size);
            let base64Img = data.toString('base64');
            let images = `data:image/png;base64,${
      
      base64Img}`
            callback(`转换成功,data:image/png;base64......`)
            return base64Img
        });
    });
},
//#endregion

根据URL路劲异步返回Base64图片链接

function ImgToBase64Async(imageUrl, callback) {
    
    
    return new Promise(function (resolve, reject) {
    
    
        const url = (imageUrl !== null && imageUrl.trim() !== '' && imageUrl.length >= 20) ? imageUrl : 'http://img10.360buyimg.com/n7/jfs/t1/171353/9/37342/60961/6444f803F94c1aeb3/1babdae3121fdbac.jpg'
        try {
    
    
            http.get(url, function (res) {
    
    
                let chunks = [];
                let size = 0;
                res.on('data', function (chunk) {
    
    
                    chunks.push(chunk);
                    size += chunk.length;  //累加缓冲数据的长度
                });
                res.on('end', function (err) {
    
    
                    let data = Buffer.concat(chunks, size);
                    let base64Img = data.toString('base64');
                    let images = `data:image/png;base64,${
      
      base64Img}`
                    resolve({
    
    success: true, data: images});
                    callback(`转换成功,data:image/png;base64......`)
                });
            });
        } catch (e) {
    
    
            throw new Error('错误❌!')
        }
    })
}

封装代码暴露模块

const fs = require("fs");
const path = require('path')
const http = require('http')
const request = require('request')

const DownFileController = {
    
    
    // 创建文件
    createDir: (createPath) => {
    
    
        const savePath = path.join(__dirname, `/${
      
      createPath}`)
        return new Promise(resolve => {
    
    
            fs.mkdir(savePath, (err) => {
    
    
                if (err && err.code === "EEXIST") {
    
    
                    console.log("目录已经存在...")
                    resolve(true);
                } else {
    
    
                    console.log("目录创建成功...")
                }
            })
        })
    },
	// 递归删除文件 文件夹
	deleteFile: (deletePath) => {
    
    
	    const savePath = deletePath
	    return new Promise(resolve => {
    
    
	        try {
    
    
	            let fileDirs = [];
	            // 同步检查给定路径中是​​否已存在文件
	            if (fs.existsSync(savePath)) {
    
    
	                if (fs.statSync(path).isDirectory()) {
    
    
	                    // 同步读取给定目录的内容。该方法返回一个数组
	                    fileDirs = fs.readdirSync(savePath);
	                    fileDirs.forEach(fileName => {
    
    
	                        const temPath = `${
      
      savePath}/${
      
      fileName}`
	                        //异步返回有关给定文件路径的信息。返回的fs.Stat对象具有多个字段和方法,以获取有关文件的更多详细信息。
	                        if (fs.statSync(temPath).isDirectory()) {
    
    
	                            DownFileController.deleteDir(temPath); // 递归删除目录
	                        } else {
    
    
	                            // fs.unlinkSync(temPath); //删除文件
	                            fs.rmSync(temPath); //从文件系统中同步删除文件或符号链接
	                        }
	                    })
	                    fs.rmdirSync(savePath); //删除目录
	                } else {
    
    
	                    //异步返回有关给定文件路径的信息。返回的fs.Stat对象具有多个字段和方法,以获取有关文件的更多详细信息。
	                    fs.rmSync(savePath) //给定路径下同步删除文件
	                }
	            }
	            resolve('删除文件成功!');
	        } catch {
    
    
	            resolve('删除文件失败!');
	        }
	    })
	},
   // 下载写入图片
   downAndSaveImages: (imageUrl, savePath, callback) => {
    
    
       let fileName;
       if (imageUrl !== null && imageUrl.trim() !== '') {
    
    
           fileName = imageUrl?.split("/").pop();
       } else {
    
    
           fileName = 'https://img10.360buyimg.com/n7/jfs/t1/171353/9/37342/60961/6444f803F94c1aeb3/1babdae3121fdbac.jpg'.split("/").pop();
       }
       const savePath1 = path.join(__dirname, `/${
      
      savePath}`)
       const process = fs.createWriteStream(savePath1 + `/${
      
      fileName}`);

       request({
    
    
           url: (imageUrl !== null && imageUrl.trim() !== '') ? imageUrl : 'https://img10.360buyimg.com/n7/jfs/t1/171353/9/37342/60961/6444f803F94c1aeb3/1babdae3121fdbac.jpg',
           timeout: 5000
       }).pipe(process);

       process.on("finish", () => {
    
    
           callback?.(`${
      
      fileName} 下载成功~`)
           process.close()
       });
       process.on("error", err => {
    
    
           callback?.(`${
      
      fileName} 下载失败~`, new Error(err))
       });
   },
   //#region 返回Base64数据
   imgToBase64: (imageUrl, callback) => {
    
    
       http.get(imageUrl, function (res) {
    
    
           let chunks = [];
           let size = 0;
           res.on('data', function (chunk) {
    
    
               chunks.push(chunk);
               size += chunk.length;  //累加缓冲数据的长度
           });
           res.on('end', function (err) {
    
    
               let data = Buffer.concat(chunks, size);
               let base64Img = data.toString('base64');
               let images = `data:image/png;base64,${
      
      base64Img}`
               callback(`转换成功,data:image/png;base64......`)
               return base64Img
           });
       });
   },
   imgToBase64Async: (imageUrl, callback) => {
    
    
       return new Promise(function (resolve, reject) {
    
    
           const url = (imageUrl !== null && imageUrl.trim() !== '' && imageUrl.length >= 20) ? imageUrl : 'http://img10.360buyimg.com/n7/jfs/t1/171353/9/37342/60961/6444f803F94c1aeb3/1babdae3121fdbac.jpg'
           try {
    
    
               http.get(url, function (res) {
    
    
                   let chunks = [];
                   let size = 0;
                   res.on('data', function (chunk) {
    
    
                       chunks.push(chunk);
                       size += chunk.length;  //累加缓冲数据的长度
                   });
                   res.on('end', function (err) {
    
    
                       let data = Buffer.concat(chunks, size);
                       let base64Img = data.toString('base64');
                       let images = `data:image/png;base64,${
      
      base64Img}`
                       resolve({
    
    success: true, data: images});
                       callback(`转换成功,data:image/png;base64......`)
                   });
               });
           } catch (e) {
    
    
               throw new Error('错误❌!')
           }
       })
   }
   //#endregion
}

module.exports = DownFileController

总结

以上是个人学习Node的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

猜你喜欢

转载自blog.csdn.net/m0_61490399/article/details/130467329