From 61bb052f68f73ab94e0199d66ae219fe0434bca0 Mon Sep 17 00:00:00 2001 From: zhiyu1998 <542716863@qq.com> Date: Wed, 11 Sep 2024 11:02:13 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=88=20pref:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=93=8D=E4=BD=9C=E5=92=8C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 `fs.promises` 替换为 `fs` 以简化代码 - 在删除文件和目录后添加日志记录信息 - 优化 `deleteFolderRecursive` 函数中的文件处理逻辑 - 优化 `copyFiles` 函数中的文件拷贝逻辑 - 优化 `toBase64` 函数中的文件读取逻辑 --- utils/file.js | 40 ++++++++++++++++++---------------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/utils/file.js b/utils/file.js index 62cecc0..222ce29 100644 --- a/utils/file.js +++ b/utils/file.js @@ -1,4 +1,4 @@ -import fs from "node:fs"; +import { promises as fs } from "fs"; import path from "path"; // 常量提取 @@ -14,7 +14,7 @@ const mimeTypes = { // 通用错误处理函数 function handleError(err) { - logger.error(err); + logger.error(`错误: ${err.message}\n堆栈: ${err.stack}`); throw err; } @@ -25,8 +25,9 @@ function handleError(err) { */ export async function checkAndRemoveFile(file) { try { - await fs.promises.access(file); - await fs.promises.unlink(file); + await fs.access(file); + await fs.unlink(file); + logger.info(`文件 ${file} 删除成功。`); } catch (err) { if (err.code !== 'ENOENT') { handleError(err); @@ -41,10 +42,11 @@ export async function checkAndRemoveFile(file) { */ export async function mkdirIfNotExists(dir) { try { - await fs.promises.access(dir); + await fs.access(dir); } catch (err) { if (err.code === 'ENOENT') { - await fs.promises.mkdir(dir, { recursive: true }); + await fs.mkdir(dir, { recursive: true }); + logger.info(`目录 ${dir} 创建成功。`); } else { handleError(err); } @@ -61,18 +63,16 @@ export async function deleteFolderRecursive(folderPath) { const files = await readCurrentDir(folderPath); const actions = files.map(async (file) => { const curPath = path.join(folderPath, file); - - const stat = await fs.promises.lstat(curPath); + const stat = await fs.lstat(curPath); if (stat.isDirectory()) { - // recurse return deleteFolderRecursive(curPath); } else { - // delete file - return fs.promises.unlink(curPath); + return fs.unlink(curPath); } }); await Promise.allSettled(actions); + logger.info(`文件夹 ${folderPath} 中的所有文件删除成功。`); return files.length; } catch (error) { handleError(error); @@ -87,7 +87,7 @@ export async function deleteFolderRecursive(folderPath) { */ export async function readCurrentDir(dirPath) { try { - return await fs.promises.readdir(dirPath); + return await fs.readdir(dirPath); } catch (err) { handleError(err); } @@ -105,26 +105,24 @@ export async function copyFiles(srcDir, destDir, specificFiles = []) { await mkdirIfNotExists(destDir); const files = await readCurrentDir(srcDir); - // 如果 specificFiles 数组为空,拷贝全部文件;否则只拷贝指定文件 const filesToCopy = specificFiles.length > 0 ? files.filter(file => specificFiles.includes(file)) : files; - logger.info(logger.yellow(`[R插件][拷贝文件] 正在将 ${srcDir} 的文件拷贝到 ${destDir} 中`)); + logger.info(`[R插件][拷贝文件] 正在将 ${srcDir} 的文件拷贝到 ${destDir} 中`); - // 用于保存拷贝了哪些文件 const copiedFiles = []; for (const file of filesToCopy) { const srcFile = path.join(srcDir, file); const destFile = path.join(destDir, file); - await fs.promises.copyFile(srcFile, destFile); + await fs.copyFile(srcFile, destFile); copiedFiles.push(file); } - logger.info(logger.yellow(`[R插件][拷贝文件] 拷贝完成`)); + logger.info(`[R插件][拷贝文件] 拷贝完成`); - return copiedFiles + return copiedFiles; } catch (error) { handleError(error); return []; @@ -138,9 +136,8 @@ export async function copyFiles(srcDir, destDir, specificFiles = []) { */ export async function toBase64(filePath) { try { - const fileData = await fs.promises.readFile(filePath); + const fileData = await fs.readFile(filePath); const base64Data = fileData.toString('base64'); - // 返回Base64字符串 return `data:${getMimeType(filePath)};base64,${base64Data}`; } catch (error) { handleError(error); @@ -164,11 +161,10 @@ function getMimeType(filePath) { */ export async function getMediaFilesAndOthers(folderPath) { try { - const files = await fs.promises.readdir(folderPath); + const files = await fs.readdir(folderPath); const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']; const videoExtensions = ['.mp4', '.mkv', '.avi', '.mov', '.wmv', '.flv', '.webm']; - // 初始化存储图片和视频的数组 const images = []; const videos = []; const others = [];