Initial commit: 全友米项目完整代码

This commit is contained in:
Yvan
2026-04-09 09:40:45 +08:00
commit 89960b1cb8
54 changed files with 14574 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
const Minio = require('minio');
const config = {
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 || 'minioadmin',
secretKey: process.env.MINIO_SECRET_KEY || 'minioadmin'
};
console.log('MinIO 配置:', {
...config,
secretKey: '***' // 隐藏密钥
});
const client = new Minio.Client(config);
const BUCKET = process.env.MINIO_BUCKET || 'quanyoumi';
// 确保 bucket 存在
const ensureBucket = async () => {
try {
console.log(`检查 bucket: ${BUCKET}`);
const exists = await client.bucketExists(BUCKET);
console.log(`Bucket ${BUCKET} 存在:`, exists);
if (!exists) {
console.log(`创建 bucket: ${BUCKET}`);
await client.makeBucket(BUCKET);
// 设置公开读取策略
const policy = JSON.stringify({
Version: '2012-10-17',
Statement: [{
Effect: 'Allow',
Principal: { AWS: ['*'] },
Action: ['s3:GetObject'],
Resource: [`arn:aws:s3:::${BUCKET}/*`]
}]
});
await client.setBucketPolicy(BUCKET, policy);
console.log(`Bucket ${BUCKET} 创建成功并设置为公开读取`);
}
} catch (error) {
console.error('ensureBucket 错误:', error);
throw error;
}
};
// 上传 buffer 到 MinIO,返回公开访问 URL
const uploadBuffer = async (buffer, filename, mimetype) => {
try {
console.log(`开始上传文件: ${filename}, 大小: ${buffer.length} bytes`);
await ensureBucket();
await client.putObject(BUCKET, filename, buffer, buffer.length, { 'Content-Type': mimetype });
console.log(`文件上传成功: ${filename}`);
// 如果配置了公开 URL 就用,否则用 endpoint 拼接
const publicUrl = process.env.MINIO_PUBLIC_URL;
if (publicUrl) {
return `${publicUrl}/${BUCKET}/${filename}`;
}
const protocol = process.env.MINIO_USE_SSL === 'true' ? 'https' : 'http';
const endpoint = process.env.MINIO_ENDPOINT || 'localhost';
const port = process.env.MINIO_PORT || 9000;
return `${protocol}://${endpoint}:${port}/${BUCKET}/${filename}`;
} catch (error) {
console.error('uploadBuffer 错误:', error);
throw error;
}
};
// 从 MinIO 删除文件
const deleteFile = async (filename) => {
try {
console.log(`开始删除文件: ${filename}`);
await client.removeObject(BUCKET, filename);
console.log(`文件删除成功: ${filename}`);
return true;
} catch (error) {
console.error('deleteFile 错误:', error);
throw error;
}
};
module.exports = { client, BUCKET, uploadBuffer, deleteFile };