feat: 新增OSS直传迁移能力,实现图片从本地到OSS的迁移流程

1.  新增OSS直传工具类函数,实现带凭据校验的PUT/HEAD请求
2.  新增oss_migration_log数据表,用于跟踪迁移状态
3.  重构图片保存逻辑,优先上传OSS失败则降级本地并登记补传任务
4.  新增批量迁移脚本,支持状态查看、断点续传、校验和回写DB
5.  新增OSS直链抽查调试脚本
This commit is contained in:
yangxiangyuan
2026-08-06 22:14:20 +08:00
parent 876a3b8768
commit 0f8fe2c2e2
3 changed files with 515 additions and 21 deletions
@@ -0,0 +1,26 @@
// 抽查 OSS 直链是否可公共读:每个库取 1 条 oss_url 做 GET,打印状态码与字节数
'use strict'
const path = require('path')
const https = require('https')
const Database = require('better-sqlite3')
const db = new Database(path.resolve(__dirname, '..', '..', 'data', 'style_check.db'))
const libs = ['item_images', 'wave', 'korean', 'x_fashion']
const get = (url) => new Promise((resolve, reject) => {
https.get(url, res => {
let n = 0
res.on('data', c => { n += c.length })
res.on('end', () => resolve({ status: res.statusCode, bytes: n }))
}).on('error', reject)
})
;(async () => {
for (const lib of libs) {
const r = db.prepare('SELECT local_path, oss_url FROM oss_migration_log WHERE lib=? LIMIT 1').get(lib)
if (!r) { console.log(lib, '无记录'); continue }
const res = await get(r.oss_url)
console.log(`${lib} -> ${res.status} ${res.bytes} bytes ${r.oss_url}`)
}
db.close()
})()