| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- package com.takai.ai.utils;
- import com.takai.ai.domain.TakaiSysOss;
- import com.takai.ai.domain.TakaiSysOssConfig;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.stereotype.Component;
- import io.minio.*;
- import io.minio.messages.Bucket;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.InputStream;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.UUID;
- @Component
- public class MinioUtil {
- private static final Logger logger = LoggerFactory.getLogger(MinioUtil.class);
- private final MinioClient minioClient;
- private final String bucketName;
- @Autowired
- public MinioUtil(MinioClient minioClient, String bucketName) throws Exception{
- this.minioClient = minioClient;
- this.bucketName = bucketName;
- initializeBucket();
- }
- private void initializeBucket() throws Exception {
- if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- }
- }
- /**
- * 批量上传文件
- * @param files 文件列表
- * @return 上传成功的文件URL列表
- */
- public List<TakaiSysOss> uploadMultiple(MultipartFile[] files) throws Exception {
- // try {
- // TakaiSysOss ossVo = upload(files);
- // return ossVo;
- // } catch (Exception e) {
- // // 记录失败文件信息,但继续处理其他文件
- // System.err.println("文件上传失败: " + files.getOriginalFilename() + ", 原因: " + e.getMessage());
- // }
- List<TakaiSysOss> result = new ArrayList<>();
- for (MultipartFile file : files) {
- if (file.isEmpty()) {
- continue;
- }
- try {
- TakaiSysOss ossVo = upload(file);
- result.add(ossVo);
- } catch (Exception e) {
- // 记录失败文件信息,但继续处理其他文件
- System.err.println("文件上传失败: " + file.getOriginalFilename() + ", 原因: " + e.getMessage());
- }
- }
- return result;
- }
- /**
- * 检查存储桶是否存在
- */
- public boolean bucketExists(String bucketName) throws Exception {
- return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
- }
- /**
- * 创建存储桶
- */
- public void makeBucket(String bucketName) throws Exception {
- if (!bucketExists(bucketName)) {
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- }
- }
- /**
- * 列出所有存储桶
- */
- public List<Bucket> listBuckets() throws Exception {
- return minioClient.listBuckets();
- }
- /**
- * 上传文件
- * @param file 文件对象
- * @return 文件访问URL
- */
- public TakaiSysOss upload(MultipartFile file) throws Exception {
- // 如果存储桶不存在则创建
- makeBucket(bucketName);
- // 生成日期目录路径 yyyy/MM/dd
- String dateDir = new SimpleDateFormat("yyyy/MM/dd").format(new Date());
- // 生成唯一文件名
- String originalFilename = file.getOriginalFilename();
- // String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
- // String fileName = dateDir + "/" + originalFilename;
- String fileName = originalFilename;
- // 上传文件
- try (InputStream inputStream = file.getInputStream()) {
- minioClient.putObject(
- PutObjectArgs.builder()
- .bucket(bucketName)
- .object(fileName)
- .stream(inputStream, file.getSize(), -1)
- .contentType(file.getContentType())
- .build());
- logger.info("文件上传成功: " + fileName);
- SnowflakeDigitGenerator snowflakeDigitGenerator = new SnowflakeDigitGenerator(1, 1);
- long ossId = snowflakeDigitGenerator.nextId();
- String url = minioClient.getObjectUrl(bucketName, fileName);
- TakaiSysOss oss = new TakaiSysOss();
- oss.setOssId("a"+ossId);
- oss.setUrl(url);
- oss.setFileName(fileName);
- oss.setOriginalName(originalFilename);
- oss.setService("service");
- oss.setFileSuffix(fileName.substring(fileName.lastIndexOf(".")));
- return oss;
- }
- }
- /**
- * 下载文件
- */
- public InputStream download(String bucketName, String objectName) throws Exception {
- return minioClient.getObject(
- GetObjectArgs.builder()
- .bucket(bucketName)
- .object(objectName)
- .build());
- }
- /**
- * 删除文件
- */
- public void remove(String bucketName, String objectName) throws Exception {
- minioClient.removeObject(
- RemoveObjectArgs.builder()
- .bucket(bucketName)
- .object(objectName)
- .build());
- }
- /**
- * 获取文件URL
- */
- public String getFileUrl(String bucketName, String objectName) throws Exception {
- return minioClient.getObjectUrl(bucketName, objectName);
- }
- }
|