release: v1.2.0 — unified images/ storage and legacy migration
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
ci / ci (22, ubuntu-latest) (push) Canceled after 0s
Publish Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Canceled after 0s
Publish Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Canceled after 0s
Publish Docker image / merge (push) Canceled after 0s
GitHub Release / release (push) Canceled after 0s
Consolidate local images under data/images/, add docker migrate CLI, startup index sync with orphan cleanup, and remove upload folder UI/API.
This commit is contained in:
1 parent
3dee0437e6
commit
469d3be735
50 files changed
+1273
-956
No files matched your search
@@ -1,7 +1,7 @@
|
||||
import { clientIp, logError, logInfo, logWarn } from '../utils/logger'
|
||||
|
||||
/**
|
||||
* 只记录 /api/*,避免 /images、/twikoo 直链刷屏。
|
||||
* 只记录 /api/*,避免 /images 直链刷屏。
|
||||
*/
|
||||
export default defineNitroPlugin((nitroApp) => {
|
||||
nitroApp.hooks.hook('request', (event) => {
|
||||
|
||||
+57
-14
@@ -1,6 +1,6 @@
|
||||
import { getDataDir } from '../utils/data-dir'
|
||||
import { runAutoDeleteCleanup } from '../utils/auto-delete'
|
||||
import { migrateLocalImagesToIndex } from '../utils/image-index'
|
||||
import { migrateLocalImagesToIndex, purgeOrphanImageIndexRows, reconcileLegacyImageKeys, repairLocalImageIndexMetadata } from '../utils/image-index'
|
||||
import { ensureDefaultBackends } from '../utils/storage-backends'
|
||||
import { logException, logInfo } from '../utils/logger'
|
||||
|
||||
@@ -16,19 +16,62 @@ export default defineNitroPlugin(() => {
|
||||
})
|
||||
|
||||
ensureDefaultBackends()
|
||||
void migrateLocalImagesToIndex().then((count) => {
|
||||
if (count > 0) {
|
||||
logInfo('migrated local images to index', { count })
|
||||
}
|
||||
}).catch((error) => {
|
||||
logException('migrate local images to index failed', error)
|
||||
})
|
||||
|
||||
void runAutoDeleteCleanup().then((result) => {
|
||||
if (!result.skipped && (result.deleted > 0 || result.failed > 0)) {
|
||||
logInfo('startup auto-delete', { ...result })
|
||||
void (async () => {
|
||||
const dataDir = getDataDir()
|
||||
try {
|
||||
logInfo('开始同步图片索引:扫描本地磁盘', { path: `${dataDir}/images/` })
|
||||
|
||||
const inserted = await migrateLocalImagesToIndex()
|
||||
if (inserted > 0) {
|
||||
logInfo('磁盘扫描完成:已补全缺失索引', { inserted })
|
||||
} else {
|
||||
logInfo('磁盘扫描完成:索引与磁盘一致,无需补全')
|
||||
}
|
||||
|
||||
logInfo('开始归一化遗留图片路径(如 blog/ → images/blog/)')
|
||||
const reconciled = await reconcileLegacyImageKeys()
|
||||
if (reconciled.updated > 0 || reconciled.removed > 0) {
|
||||
logInfo('遗留路径归一化完成', reconciled)
|
||||
} else {
|
||||
logInfo('遗留路径归一化完成:无需调整')
|
||||
}
|
||||
|
||||
logInfo('开始校验索引与磁盘一致性,清理无文件的孤儿记录')
|
||||
const purged = await purgeOrphanImageIndexRows()
|
||||
if (purged > 0) {
|
||||
logInfo('孤儿索引清理完成', { removed: purged })
|
||||
} else {
|
||||
logInfo('孤儿索引清理完成:未发现孤儿记录')
|
||||
}
|
||||
|
||||
logInfo('开始修复存量 Content-Type 元数据')
|
||||
const repaired = repairLocalImageIndexMetadata()
|
||||
if (repaired > 0) {
|
||||
logInfo('Content-Type 修复完成', { repaired })
|
||||
} else {
|
||||
logInfo('Content-Type 修复完成:无需修复')
|
||||
}
|
||||
|
||||
logInfo('图片索引同步结束')
|
||||
} catch (error) {
|
||||
logException('图片索引同步失败', error)
|
||||
}
|
||||
}).catch((error) => {
|
||||
logException('startup auto-delete failed', error)
|
||||
})
|
||||
})()
|
||||
|
||||
void (async () => {
|
||||
try {
|
||||
logInfo('开始执行启动时自动删除检查')
|
||||
const result = await runAutoDeleteCleanup()
|
||||
if (result.skipped) {
|
||||
logInfo('自动删除检查完成:策略未启用')
|
||||
} else if (result.deleted > 0 || result.failed > 0) {
|
||||
logInfo('自动删除检查完成', { ...result })
|
||||
} else {
|
||||
logInfo('自动删除检查完成:无到期图片')
|
||||
}
|
||||
} catch (error) {
|
||||
logException('启动时自动删除失败', error)
|
||||
}
|
||||
})()
|
||||
})
|
||||
Reference in new issue
Block a user