56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
|
|
export default defineEventHandler(async (event) => {
|
||
|
|
try {
|
||
|
|
const { bucket, prefix } = getQuery(event);
|
||
|
|
|
||
|
|
if (!bucket) {
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: 'Missing bucket parameter'
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('[test-list-bucket] Listing files:', {
|
||
|
|
bucket: bucket as string,
|
||
|
|
prefix: prefix as string || ''
|
||
|
|
});
|
||
|
|
|
||
|
|
// Import MinIO client
|
||
|
|
const { getMinioClient } = await import('~/server/utils/minio');
|
||
|
|
const client = getMinioClient();
|
||
|
|
|
||
|
|
const files: any[] = [];
|
||
|
|
|
||
|
|
await new Promise((resolve, reject) => {
|
||
|
|
const stream = client.listObjectsV2(bucket as string, prefix as string || '', true);
|
||
|
|
|
||
|
|
stream.on('data', (obj) => {
|
||
|
|
if (obj && obj.name) {
|
||
|
|
files.push({
|
||
|
|
name: obj.name,
|
||
|
|
size: obj.size,
|
||
|
|
lastModified: obj.lastModified
|
||
|
|
});
|
||
|
|
}
|
||
|
|
});
|
||
|
|
|
||
|
|
stream.on('error', reject);
|
||
|
|
stream.on('end', resolve);
|
||
|
|
});
|
||
|
|
|
||
|
|
return {
|
||
|
|
success: true,
|
||
|
|
bucket: bucket as string,
|
||
|
|
prefix: prefix as string || '',
|
||
|
|
count: files.length,
|
||
|
|
files: files
|
||
|
|
};
|
||
|
|
} catch (error: any) {
|
||
|
|
console.error('[test-list-bucket] Error:', error);
|
||
|
|
return {
|
||
|
|
success: false,
|
||
|
|
error: 'Failed to list bucket',
|
||
|
|
details: error.message
|
||
|
|
};
|
||
|
|
}
|
||
|
|
});
|