import 'dart:io'; import 'package:crypto/crypto.dart'; import 'package:file_picker/file_picker.dart'; import 'package:minio/io.dart'; import 'package:minio/minio.dart'; class MinIOHelper { static final MinIOHelper _instance = MinIOHelper._internal(); factory MinIOHelper() => _instance; final String rustfsIp = '14.103.235.151'; final String rustfsFileUrl = 'http://14.103.235.151:9100'; final String bucketName = 'flisp'; MinIOHelper._internal() { _minio = Minio( endPoint: rustfsIp, port: 9100, accessKey: "tHSFfcDW8qpCzKa2Xg6Y", secretKey: "oq79EeYJ4jdczRp2IHUMCnbKtSw58NgDlG3sOkvX", useSSL: false, ); } late Minio _minio; Future uploadFile({ required PlatformFile file, Function(double)? onProgress, }) async { try { String hashName = await _generateMD5HashName(file.path!); String fileName = '$hashName${_getFileExtension(file.name)}'; await _minio.fPutObject(bucketName, fileName, file.path!); return fileName; } catch (e) { throw Exception('文件上传失败: $e'); } } String _getFileExtension(String fileName) { if (fileName.contains('.')) { return '.${fileName.split('.').last.toLowerCase()}'; } return ''; } Future _generateMD5HashName(String filePath) async { final file = File(filePath); final bytes = await file.readAsBytes(); final hash = md5.convert(bytes); return hash.toString(); } }