Files
ggl/test-video-covers.cjs
2025-09-23 07:35:11 +00:00

116 lines
3.2 KiB
JavaScript
Raw Permalink 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.

/**
* 测试视频封面功能脚本
* 验证所有视频的封面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);