#!/usr/bin/env bun import { storeFile, getFileByObjectName, deleteFile, getStorageStats } from './lib/fileStorage' async function testMinIOFileOperations() { console.log('🚀 开始测试 MinIO 文件操作...') try { // 测试截图文件上传 console.log('\n📤 测试截图文件上传...') const testImageData = Buffer.from('fake image data for testing') const storedScreenshot = await storeFile( testImageData, 'test-screenshot.webp', 'image/webp', 'screenshot', 'test-hostname' ) console.log('✅ 截图上传成功:', { id: storedScreenshot.id, objectName: storedScreenshot.objectName, size: storedScreenshot.size }) // 测试版本文件上传 console.log('\n📤 测试版本文件上传...') const testExeData = Buffer.from('fake exe data for testing') const storedVersion = await storeFile( testExeData, 'winupdate-v1.0.0.exe', 'application/x-msdownload', 'version' ) console.log('✅ 版本文件上传成功:', { id: storedVersion.id, objectName: storedVersion.objectName, size: storedVersion.size }) // 测试文件下载 console.log('\n📥 测试文件下载...') const downloadedScreenshot = await getFileByObjectName(storedScreenshot.objectName) if (downloadedScreenshot && downloadedScreenshot.buffer.equals(testImageData)) { console.log('✅ 截图下载成功,数据一致') } else { console.log('❌ 截图下载失败或数据不一致') } const downloadedVersion = await getFileByObjectName(storedVersion.objectName) if (downloadedVersion && downloadedVersion.buffer.equals(testExeData)) { console.log('✅ 版本文件下载成功,数据一致') } else { console.log('❌ 版本文件下载失败或数据不一致') } // 测试存储统计 console.log('\n📊 测试存储统计...') const stats = await getStorageStats() console.log('✅ 存储统计:', { totalObjects: stats.totalObjects, totalSize: `${(stats.totalSize / 1024).toFixed(2)} KB`, bucketName: stats.bucketName }) // 清理测试文件 console.log('\n🗑️ 清理测试文件...') const deleteScreenshotResult = await deleteFile(storedScreenshot.objectName) const deleteVersionResult = await deleteFile(storedVersion.objectName) if (deleteScreenshotResult && deleteVersionResult) { console.log('✅ 测试文件清理成功') } else { console.log('⚠️ 部分测试文件清理失败') } console.log('\n🎉 MinIO 文件操作测试完成!') } catch (error) { console.error('❌ 测试过程中出现错误:', error) process.exit(1) } } testMinIOFileOperations().catch(console.error)