文章目录
- 前言
- 导入模块
- 创建文件
- 递归删除文件&文件夹
- 下载写入图片
- 根据URL路劲返回Base64图片链接
- 根据URL路劲异步返回Base64图片链接
- 封装代码暴露模块
- 总结
⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇ 不能 ⡏⠀⠀ ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇ 白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽
前言
Node.js
是一个javascript运行环境。它让javascript可以开发后端程序
,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。- 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的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波