latest-oss-files.cjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. // 列 OSS audio/ 最近 N 个文件,带时间戳和稳定/UUID 标记
  2. const fs = require('fs');
  3. const path = require('path');
  4. const envTxt = fs.readFileSync(path.join(__dirname, '..', '..', 'server', '.env.production'), 'utf8');
  5. const env = {};
  6. for (const line of envTxt.split(/\r?\n/)) {
  7. const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/);
  8. if (m) env[m[1]] = m[2].replace(/^["']|["']$/g, '');
  9. }
  10. const OSS = require(path.join(__dirname, '..', '..', 'server', 'node_modules', 'ali-oss'));
  11. const c = new OSS({
  12. accessKeyId: env.OSS_ACCESS_KEY_ID,
  13. accessKeySecret: env.OSS_ACCESS_KEY_SECRET,
  14. bucket: 'rrbrr-book-audio',
  15. endpoint: 'oss-cn-shanghai.aliyuncs.com',
  16. secure: true,
  17. });
  18. (async () => {
  19. const all = [];
  20. let marker = null;
  21. do {
  22. const r = await c.list({ prefix: 'audio/', 'max-keys': 1000, marker });
  23. all.push(...(r.objects || []));
  24. marker = r.nextMarker || null;
  25. } while (marker);
  26. // 按 lastModified 倒序
  27. all.sort((a, b) => new Date(b.lastModified) - new Date(a.lastModified));
  28. console.log(`总文件数: ${all.length}\n`);
  29. console.log('=== 最近 25 个文件 ===');
  30. for (const o of all.slice(0, 25)) {
  31. const isMergedPath = o.name.includes('/merged/chapter/') || o.name.includes('/audio/chapter/');
  32. const isMergedMp3 = o.name.includes('_merged.mp3');
  33. const tag = isMergedPath ? '✅ 稳定路径' : (isMergedMp3 ? '⚠️ UUID_merged (垃圾)' : ' UUID (TTS)');
  34. const mb = (o.size / 1024 / 1024).toFixed(1).padStart(6);
  35. console.log(`${o.lastModified.slice(0, 19)} ${mb} MB ${tag.padEnd(22)} ${o.name}`);
  36. }
  37. })();