first commit

This commit is contained in:
2025-09-23 07:35:11 +00:00
commit a5dd3f1335
110 changed files with 46108 additions and 0 deletions

116
test-video-covers.cjs Normal file
View File

@@ -0,0 +1,116 @@
/**
* 测试视频封面功能脚本
* 验证所有视频的封面API是否正常工作
*/
const http = require('http');
const sqlite3 = require('sqlite3').verbose();
const path = require('path');
// 数据库路径
const DB_PATH = path.join(__dirname, 'database', 'goguryeo_video.db');
// 测试视频封面API
function testVideoFrame(videoId) {
return new Promise((resolve) => {
const options = {
hostname: 'localhost',
port: 4001,
path: `/api/videos/${videoId}/frame`,
method: 'GET'
};
const req = http.request(options, (res) => {
console.log(`视频 ${videoId}: 状态码 ${res.statusCode}, 内容类型: ${res.headers['content-type']}, 大小: ${res.headers['content-length']} bytes`);
if (res.statusCode === 200 && res.headers['content-type'] === 'image/jpeg') {
resolve({ videoId, success: true, size: res.headers['content-length'] });
} else {
resolve({ videoId, success: false, statusCode: res.statusCode });
}
// 消费响应数据
res.on('data', () => {});
res.on('end', () => {});
});
req.on('error', (err) => {
console.error(`视频 ${videoId} 请求错误:`, err.message);
resolve({ videoId, success: false, error: err.message });
});
req.setTimeout(10000, () => {
console.error(`视频 ${videoId} 请求超时`);
req.destroy();
resolve({ videoId, success: false, error: 'timeout' });
});
req.end();
});
}
// 主测试函数
async function testAllVideoCovers() {
console.log('开始测试视频封面功能...');
// 连接数据库
const db = new sqlite3.Database(DB_PATH, (err) => {
if (err) {
console.error('数据库连接失败:', err);
return;
}
console.log('已连接到数据库');
});
// 获取所有视频ID
db.all('SELECT id, title FROM videos ORDER BY id', async (err, rows) => {
if (err) {
console.error('查询视频失败:', err);
return;
}
console.log(`找到 ${rows.length} 个视频,开始测试封面功能...\n`);
const results = [];
// 逐个测试视频封面
for (const video of rows) {
const result = await testVideoFrame(video.id);
results.push(result);
// 添加延迟避免过快请求
await new Promise(resolve => setTimeout(resolve, 500));
}
// 统计结果
const successful = results.filter(r => r.success);
const failed = results.filter(r => !r.success);
console.log('\n=== 测试结果统计 ===');
console.log(`总视频数: ${results.length}`);
console.log(`成功生成封面: ${successful.length}`);
console.log(`失败: ${failed.length}`);
if (failed.length > 0) {
console.log('\n失败的视频:');
failed.forEach(f => {
console.log(`- 视频 ${f.videoId}: ${f.error || '状态码 ' + f.statusCode}`);
});
}
if (successful.length > 0) {
console.log('\n成功的视频封面大小:');
successful.forEach(s => {
console.log(`- 视频 ${s.videoId}: ${s.size} bytes`);
});
}
console.log('\n测试完成');
// 关闭数据库连接
db.close();
});
}
// 运行测试
testAllVideoCovers().catch(console.error);