flnxi-Wu/scripts/update-file-sizes.js
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

88 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* 脚本:更新已有素材的文件大小信息
* 用途:扫描所有素材的压缩包文件,更新数据库中的 zipFileSize 字段
*/
const { PrismaClient } = require('@prisma/client')
const fs = require('fs')
const path = require('path')
const prisma = new PrismaClient()
async function updateFileSizes() {
try {
console.log('🚀 开始扫描素材文件...\n')
// 获取所有素材
const materials = await prisma.material.findMany({
select: {
id: true,
zipFilePath: true,
zipFileName: true,
zipFileSize: true
}
})
console.log(`📊 找到 ${materials.length} 个素材\n`)
let successCount = 0
let skipCount = 0
let errorCount = 0
for (const material of materials) {
try {
// 如果已经有大小信息且不为0,跳过
if (material.zipFileSize && BigInt(material.zipFileSize) > 0) {
console.log(`⏭️ 跳过: ${material.zipFileName} (已有大小信息)`)
skipCount++
continue
}
// 检查文件是否存在
if (!fs.existsSync(material.zipFilePath)) {
console.log(`❌ 文件不存在: ${material.zipFilePath}`)
errorCount++
continue
}
// 获取文件大小
const stats = fs.statSync(material.zipFilePath)
const fileSize = BigInt(stats.size)
// 更新数据库
await prisma.material.update({
where: { id: material.id },
data: { zipFileSize: fileSize }
})
const sizeMB = (Number(fileSize) / 1024 / 1024).toFixed(2)
console.log(`✅ 已更新: ${material.zipFileName} (${sizeMB} MB)`)
successCount++
} catch (error) {
console.error(`❌ 处理失败: ${material.zipFileName}`, error.message)
errorCount++
}
}
console.log('\n📈 统计结果:')
console.log(` ✅ 成功更新: ${successCount}`)
console.log(` ⏭️ 已跳过: ${skipCount}`)
console.log(` ❌ 失败: ${errorCount}`)
console.log(` 📊 总计: ${materials.length}`)
console.log('\n✨ 完成!')
} catch (error) {
console.error('❌ 执行失败:', error)
process.exit(1)
} finally {
await prisma.$disconnect()
}
}
// 执行脚本
updateFileSizes()