// 探查 rrbrr-book-audio 实际所在 region const fs = require('fs'); const path = require('path'); const envTxt = fs.readFileSync(path.join(__dirname, '..', '..', 'server', '.env.production'), 'utf8'); const env = {}; for (const line of envTxt.split(/\r?\n/)) { const m = line.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*)\s*$/); if (m) env[m[1]] = m[2].replace(/^["']|["']$/g, ''); } const OSS = require(path.join(__dirname, '..', '..', 'server', 'node_modules', 'ali-oss')); const AK = env.OSS_ACCESS_KEY_ID; const SK = env.OSS_ACCESS_KEY_SECRET; const REGIONS = [ 'oss-cn-hangzhou','oss-cn-beijing','oss-cn-shanghai','oss-cn-shenzhen', 'oss-cn-qingdao','oss-cn-zhangjiakou','oss-cn-huabei-3','oss-cn-huabei-5', 'oss-cn-hangzhou-finance','oss-cn-shanghai-finance-1','oss-cn-chengdu', 'oss-cn-hongkong','oss-cn-fuzhou','oss-cn-wulanchabu','oss-cn-shenyang', 'oss-cn-nanjing','oss-cn-heyuan', 'oss-us-west-1','oss-us-east-1', 'oss-ap-southeast-1','oss-ap-southeast-2','oss-ap-southeast-3','oss-ap-southeast-5','oss-ap-southeast-6','oss-ap-southeast-7', 'oss-ap-northeast-1','oss-ap-south-1', 'oss-eu-central-1','oss-eu-west-1','oss-me-central-1','oss-rus-west-1' ]; (async () => { for (const r of REGIONS) { try { const c = new OSS({ accessKeyId: AK, accessKeySecret: SK, bucket: 'rrbrr-book-audio', endpoint: r + '.aliyuncs.com', secure: true }); const info = await c.getBucketInfo('rrbrr-book-audio'); console.log(`\n✅ 命中 region = ${r}`); console.log(' ExtranetEndpoint =', info.bucket?.ExtranetEndpoint); console.log(' IntranetEndpoint =', info.bucket?.IntranetEndpoint); console.log(' Region =', info.bucket?.Region); console.log(' StorageClass =', info.bucket?.StorageClass); console.log(' CreationDate =', info.bucket?.CreationDate); return; } catch (e) { // 只显示前 60 字符 const msg = (e.code || e.message || '').toString().split('\n')[0].slice(0, 80); console.log(` miss ${r.padEnd(28)} -> ${msg}`); } } console.log('\n全部 region 都没命中,请确认 AK/SK 有该 bucket 权限。'); })();