如何用Node.js获取S3存储桶中最新文件夹内的最新文件名
使用Node.js获取Amazon S3存储桶中最新文件夹内的最新文件名
前提准备
先安装AWS官方推荐的JavaScript SDK v3,执行以下命令:
npm install @aws-sdk/client-s3
实现步骤与代码
初始化S3客户端
建议通过环境变量配置AWS凭证和区域,避免硬编码敏感信息:const { S3Client, ListObjectsV2Command } = require("@aws-sdk/client-s3"); const s3Client = new S3Client({ region: "你的存储桶区域", // 例如 'us-east-1' // 凭证可通过环境变量AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY自动加载 });获取存储桶内所有对象的键
S3的"文件夹"本质是对象键的前缀,先获取所有对象的完整键:async function getAllObjectKeys(bucketName) { const command = new ListObjectsV2Command({ Bucket: bucketName }); const response = await s3Client.send(command); return response.Contents.map(item => item.Key); }解析键并筛选最新文件
遍历所有键,提取日期信息后排序,找到最新的文件:async function getLatestFileName(bucketName) { const keys = await getAllObjectKeys(bucketName); if (keys.length === 0) return null; const sortedFiles = keys .filter(key => key.endsWith('.txt')) .map(key => { // 从文件名提取8位日期(如filename_20230301.txt中的20230301) const dateMatch = key.match(/(\d{8})\.txt$/); if (!dateMatch) return null; return { key, date: new Date( dateMatch[1].slice(0,4), dateMatch[1].slice(4,6)-1, dateMatch[1].slice(6,8) ) }; }) .filter(item => item !== null) .sort((a, b) => b.date - a.date); // 按日期降序排列 if (sortedFiles.length === 0) return null; // 返回文件名(从完整键中提取最后一段) return sortedFiles[0].key.split('/').pop(); }调用函数获取结果
const bucketName = "你的存储桶名称"; getLatestFileName(bucketName) .then(fileName => { fileName ? console.log("最新文件名:", fileName) : console.log("未找到符合条件的txt文件"); }) .catch(err => console.error("获取失败:", err));
补充说明
如果需要依赖年份/月份文件夹层级判断新旧,可先筛选出最新的年份前缀,再筛选对应年份下的最新月份前缀,最后取该月份下的文件,核心逻辑仍是解析键并排序,只需调整筛选规则即可。
内容的提问来源于stack exchange,提问作者Orbita1frame
相关产品推荐
相关产品推荐

