当前位置: 首页 > news >正文

遍历访问阿里云节点下的所有文件信息并写入excel文件

后台系统用的久了,由于图片替换和删除导致阿里云上存在大量系统不在使用的图片。阿里是按照所有图片和视频等文件总容量以及下载流量收费的。所以这些不用的图片和视频需要定期清理。
遍历访问阿里云节点下的所有文件信息,并写入excel文件(阿里云文件数据表)。从阿里云中查到的图片文件地址都是http://开头的,要替换成https://开头的.
导入头文件和静态变量

const FspConstant = require('@app/tools/fsp_constant.js');
const Tool = require('@app/tools/common_tool.js');
const msgCode = require('@app/config/error_config.js');
const Excel = require('exceljs');
const fs = require('fs');
const path = require('path');
const https = require('https');
const OSS = require('ali-oss');
const ossHZ = new OSS({region: 'oss-cn-hangzhou',accessKeyId: FspConstant.ACCESS_KEY_ID,accessKeySecret: FspConstant.ACCESS_KEY_SECRET,bucket: '具体的bucket名称',
});

实现代码:

//获取阿里云节点下除了wx-test目录及子目录文件的所有文件
DeleteRepeatImageVideoTool.getAllFileUrlsWithPagination = async function(prefix = '') {const allFiles = [];let marker = null;// 定义要忽略的文件夹列表const ignoreFolders = [ 'wx-test'];try {do {const result = await ossHZ.list({prefix: prefix,delimiter: '/','max-keys': 1000,marker: marker}, {});// 处理文件 - 过滤掉目录if (result.objects) {for (const object of result.objects) {// 只处理真正的文件,不处理目录if (!object.name.endsWith('/') && object.size > 0) {let url = ossHZ.generateObjectUrl(object.name);url = url.replace('http://fangsuanpan.oss-cn-hangzhou.aliyuncs.com/', 'https://fangsuanpan.oss-cn-hangzhou.aliyuncs.com/');// 提取根目录let rootDir = '';const firstSlashIndex = object.name.indexOf('/');if (firstSlashIndex !== -1) {rootDir = object.name.substring(0, firstSlashIndex);} else {// 如果没有斜杠,说明文件在根目录下rootDir = 'root';}allFiles.push({name: object.name,url: url,size: object.size,lastModified: object.lastModified,type: object.type,dir: rootDir});}}}// 递归处理子目录if (result.prefixes) {for (const subPrefix of result.prefixes) {// 检查是否在忽略列表中const shouldIgnore = ignoreFolders.some(folder => subPrefix.startsWith(folder + '/') || subPrefix === folder);if (shouldIgnore) {console.log(`忽略文件夹: ${subPrefix}`);continue; // 跳过这个文件夹}console.log(`遍历子目录: ${subPrefix}`);const subFiles = await this.getAllFileUrlsWithPagination(subPrefix);// 确保subFiles是数组if (Array.isArray(subFiles)) {allFiles.push(...subFiles);} else if (subFiles && Array.isArray(subFiles.allFiles)) {allFiles.push(...subFiles.allFiles);}// console.log(`遍历子目录: ${subPrefix}`);// const subFiles = await this.getAllFileUrlsWithPagination(subPrefix);// // 确保subFiles是数组// if (Array.isArray(subFiles)) {//     allFiles.push(...subFiles);// } else if (subFiles && Array.isArray(subFiles.allFiles)) {//     allFiles.push(...subFiles.allFiles);// }}}marker = result.nextMarker;console.log(`已找到 ${allFiles.length} 个文件,继续标记: ${marker}`);// break;    } while (marker);// 如果是顶层调用,生成Excel;否则返回文件数组if (prefix === '') {if(Tool.checkNotEmptArray(allFiles)){let excel = Tool.makeExcel(allFiles, ['name', 'url', 'size','lastModified', 'type', 'dir'], {name: '文件路径',url: '文件地址',size: '文件大小',lastModified: '最后修改时间',type: '类型',dir: '根目录' });return {excel, fileCount: allFiles.length};}else{return {fileCount: 0};}} else {// 递归调用返回文件数组return allFiles;}} catch (error) {console.error('分页遍历失败:', error);throw msgCode[39522]('获取图片列表');}
};

若遍历并写入所有文件信息到excel这部分代码修改为这样:

                    const shouldIgnore = false;// ignoreFolders.some(folder => //     subPrefix.startsWith(folder + '/') || subPrefix === folder// );
http://www.dtcms.com/a/600633.html

相关文章:

  • 平台消息推送(go)
  • uniapp集成爱山东获取用户信息
  • Python编程实战 - Python实用工具与库 - 操作Excel:openpyxl / pandas
  • 开展我国电子网站建设wordpress表白
  • Java 在 Excel 中添加或删除批注:Spire.XLS for Java 实践指南
  • uniapp 使用unocss的问题
  • [Linux——Lesson23.线程概念与控制:线程基础]
  • 四大主流浏览器Chrome、Edge、Safari、Firefox内核检测免费工具评测
  • 弱网通话没保障?多网聚合,逐包调度,新技术扫除网络痛点
  • 网站制作公司的网站贵阳网站改版
  • 电脑硬件价格呈现持续上涨趋势及软件优化的必要性
  • Spring集成kafka的最佳方式
  • 设计网站怎么做网业是什么行业
  • RK3588应用分享之国产化系统-开源鸿蒙OpenHarmony
  • RabbitMQ-基础-总结
  • 学习react第二天
  • 【JVS更新日志】低代码、APS排产、物联网、企业计划11.12更新说明!
  • 前端注释规范:如何写“后人能看懂”的注释(附示例)
  • C语言编译器下载地址 | 如何选择适合自己的C语言编译器
  • HarmonyOS之深入解析如何实现语音朗读能力
  • 台州企业网站的建设做网站能挣多少钱
  • 网站开发内容包括哪些wordpress 统计代码
  • 【昇腾CANN工程实践】BERT情感分析API性能优化实录:从CPU到NPU的15倍加速
  • 【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上)
  • 使用 BR 备份 TiDB 到阿里云 OSS 存储
  • 机器学习项目——基于集成学习提升树情绪分类(代码/论文)
  • C++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)
  • 尚硅谷 SpringCloud 01 分布式概念-工程创建-nacos安装-nacos服务注册与发现 -远程调用
  • C# Sqlite帮助类
  • 传统方式部署 Hadoop 高可用集群