Files
YG-Datasets/easy-dataset-main/app/api/projects/[projectId]/image-datasets/route.js

73 lines
2.3 KiB
JavaScript

import { NextResponse } from 'next/server';
import { getImageDatasetsByProject } from '@/lib/db/imageDatasets';
import { getProjectPath } from '@/lib/db/base';
import fs from 'fs/promises';
import path from 'path';
// 获取图片数据集列表
export async function GET(request, { params }) {
try {
const { projectId } = params;
const { searchParams } = new URL(request.url);
const page = parseInt(searchParams.get('page')) || 1;
const pageSize = parseInt(searchParams.get('pageSize')) || 20;
const search = searchParams.get('search') || '';
const confirmed = searchParams.get('confirmed');
const minScore = searchParams.get('minScore');
const maxScore = searchParams.get('maxScore');
// 构建筛选条件
const filters = {};
if (search) {
filters.search = search;
}
if (confirmed !== null && confirmed !== undefined) {
filters.confirmed = confirmed === 'true';
}
if (minScore) {
filters.minScore = parseInt(minScore);
}
if (maxScore) {
filters.maxScore = parseInt(maxScore);
}
const result = await getImageDatasetsByProject(projectId, page, pageSize, filters);
// 获取项目路径
const projectPath = await getProjectPath(projectId);
// 为每个数据集添加图片 base64
const datasetsWithImages = await Promise.all(
result.data.map(async dataset => {
try {
const imagePath = path.join(projectPath, 'images', dataset.imageName);
const imageBuffer = await fs.readFile(imagePath);
const base64 = imageBuffer.toString('base64');
const ext = path.extname(dataset.imageName).toLowerCase();
const mimeType = ext === '.png' ? 'image/png' : ext === '.gif' ? 'image/gif' : 'image/jpeg';
return {
...dataset,
base64: `data:${mimeType};base64,${base64}`
};
} catch (error) {
console.error(`Failed to read image ${dataset.imageName}:`, error);
return {
...dataset,
base64: null
};
}
})
);
return NextResponse.json({
data: datasetsWithImages,
total: result.total
});
} catch (error) {
console.error('Failed to get image datasets:', error);
return NextResponse.json({ error: error.message || 'Failed to get image datasets' }, { status: 500 });
}
}