winupdate-neo/lib/minioClient.ts
2025-06-28 15:16:06 +08:00

81 lines
2.5 KiB
TypeScript

import * as Minio from 'minio'
// MinIO 配置 - 从环境变量读取
export const minioConfig = {
endPoint: process.env.MINIO_ENDPOINT || 'localhost',
port: parseInt(process.env.MINIO_PORT || '9000'),
useSSL: process.env.MINIO_USE_SSL === 'true',
accessKey: process.env.MINIO_ACCESS_KEY || '',
secretKey: process.env.MINIO_SECRET_KEY || ''
}
export const BUCKET_NAME = process.env.MINIO_BUCKET_NAME || 'winupdate'
// 验证配置
if (!minioConfig.accessKey || !minioConfig.secretKey) {
console.error('❌ MinIO 配置不完整,请检查环境变量 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY')
}
// 创建 MinIO 客户端
export const minioClient = new Minio.Client(minioConfig)
// 测试连接并确保 bucket 存在
export async function initializeMinIO(): Promise<boolean> {
try {
// 测试连接
await minioClient.listBuckets()
console.log('✅ MinIO 连接成功')
// 检查 bucket 是否存在
const bucketExists = await minioClient.bucketExists(BUCKET_NAME)
if (!bucketExists) {
console.log(`❌ Bucket "${BUCKET_NAME}" 不存在`)
return false
}
console.log(`✅ Bucket "${BUCKET_NAME}" 存在`)
return true
} catch (error) {
console.error('❌ MinIO 连接失败:', error)
return false
}
}
// 测试上传小文件
export async function testMinIOUpload(): Promise<boolean> {
try {
const testData = Buffer.from('Hello MinIO! This is a test file.')
const objectName = `test/test-${Date.now()}.txt`
await minioClient.putObject(BUCKET_NAME, objectName, testData)
console.log(`✅ 测试文件上传成功: ${objectName}`)
// 测试下载
const stream = await minioClient.getObject(BUCKET_NAME, objectName)
const chunks: Buffer[] = []
return new Promise((resolve, reject) => {
stream.on('data', (chunk) => chunks.push(chunk))
stream.on('end', () => {
const downloadedData = Buffer.concat(chunks)
if (downloadedData.toString() === testData.toString()) {
console.log('✅ 测试文件下载成功')
// 清理测试文件
minioClient.removeObject(BUCKET_NAME, objectName).catch(console.error)
resolve(true)
} else {
console.log('❌ 测试文件下载数据不匹配')
resolve(false)
}
})
stream.on('error', (error) => {
console.error('❌ 测试文件下载失败:', error)
reject(error)
})
})
} catch (error) {
console.error('❌ MinIO 测试失败:', error)
return false
}
}