// 下载表格 cell 图片 u299.png + data/document.js,验证公开可下载 import fs from 'node:fs'; const mapping = JSON.parse(fs.readFileSync('e:/code/crm-backend-matt/.scratch/lanhu-latest/team-mapping.json', 'utf8')); const OSS = 'https://lanhu-axure-file.oss-cn-beijing.aliyuncs.com'; // 1. 表格 cell 图片 const cellImg = mapping.images['images/a3-1-1-1-8(个人)商机详情_团队成员/u299.png']; console.log('u299.png sign:', cellImg.sign_md5); const r1 = await fetch(`${OSS}/${cellImg.sign_md5}`, { headers: { 'User-Agent': 'Mozilla/5.0' } }); console.log('u299.png status:', r1.status, r1.headers.get('content-type'), 'size:', r1.headers.get('content-length')); if (r1.ok) { const buf = Buffer.from(await r1.arrayBuffer()); fs.writeFileSync('e:/code/crm-backend-matt/.scratch/lanhu-latest/u299.png', buf); console.log('u299.png saved,', buf.length, 'bytes'); } // 2. 多下载几个表格相关 PNG(u305/u306/u312 都是表格附近的) for (const name of ['u305.png', 'u306.png', 'u312.png']) { const key = `images/a3-1-1-1-8(个人)商机详情_团队成员/${name}`; const m = mapping.images[key]; if (!m) { console.log(name, ': not in mapping'); continue; } const r = await fetch(`${OSS}/${m.sign_md5}`, { headers: { 'User-Agent': 'Mozilla/5.0' } }); if (r.ok) { const buf = Buffer.from(await r.arrayBuffer()); fs.writeFileSync(`e:/code/crm-backend-matt/.scratch/lanhu-latest/${name}`, buf); console.log(`${name}: ${r.status}, ${buf.length} bytes`); } else console.log(`${name}: ${r.status}`); } // 3. data/document.js(文档级 sitemap) const docJs = mapping.scripts['data/document.js']; if (docJs) { const sign = docJs.sign_md5; const url = sign.startsWith('http') ? sign : `${OSS}/${sign}`; const r3 = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' } }); console.log('document.js status:', r3.status); if (r3.ok) { const t = await r3.text(); fs.writeFileSync('e:/code/crm-backend-matt/.scratch/lanhu-latest/document.js', t, 'utf8'); console.log('document.js saved,', t.length, 'chars, head:', t.slice(0, 200).replace(/\n/g, ' ')); } }