总体步骤
一步引入依赖
第二步:配置参数
第三步:添加MinIoUtil
第四步:接口引用

代码

<!--存储文件依赖-->
<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>7.1.0</version><br> </dependency>
/**
 * minio相关配置可以配置yml文件
 */
@Component
public class ParamConfig {
 
    public static String endpoint = "http://127.0.0.1:9000";
    public static String accessKey = "minioadmin";
    public static String secretKey = "minioadmin";
    public static String bucketName = "uavtest";
 
}


import cn.hutool.core.date.DateUtil;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.messages.Bucket;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
 
import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
 
/**
 * Minio工具类
 */
@Slf4j
@Component
public class MinIoUtil {
 
    public static MinioClient minioClient;
 
    public static ParamConfig paramConfig;
 
    /**
     * 初始化minio配置
     */
    @PostConstruct
    public void init() {
        try {
            log.info("Minio Initialize........................");
            minioClient = MinioClient.builder().endpoint(paramConfig.endpoint).credentials(paramConfig.accessKey, paramConfig.secretKey).build();
            createBucket(paramConfig.bucketName);
            log.info("Minio Initialize........................successful");
        } catch (Exception e) {
            e.printStackTrace();
            log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
        }
    }
 
    /**
     * 判断bucket是否存在
     */
    @SneakyThrows(Exception.class)
    public static boolean bucketExists(String bucketName) {
        return minioClient.bucketExists(bucketName);
    }
 
    /**
     * 创建bucket
     */
    @SneakyThrows(Exception.class)
    public static void createBucket(String bucketName) {
        boolean isExist = minioClient.bucketExists(bucketName);
        if (!isExist) {
            minioClient.makeBucket(bucketName);
        }
    }
 
    /**
     * 获取全部bucket
     */
    @SneakyThrows(Exception.class)
    public static List<Bucket> getAllBuckets() {
        return minioClient.listBuckets();
    }
 
    /**
     * 文件上传
     *
     * @param bucketName: 桶名
     * @param fileName:   文件名
     * @param filePath:   文件路径
     */
    @SneakyThrows(Exception.class)
    public static void upload(String bucketName, String fileName, String filePath) {
        minioClient.putObject(bucketName, fileName, filePath, null);
    }
 
    /**
     * 上传文件
     * 返回可以直接预览文件的URL
     */
    public static String uploadFile(MultipartFile file) {
        try {
            //如果存储桶不存在创建
            if (!bucketExists(ParamConfig.bucketName)) {
                createBucket(ParamConfig.bucketName);
            }
            PutObjectOptions putObjectOptions = new PutObjectOptions(file.getInputStream().available(), -1);
            putObjectOptions.setContentType(file.getContentType());
            String originalFilename = file.getOriginalFilename();
            //得到文件流
            InputStream inputStream = file.getInputStream();
            //保证文件不重名(并且没有特殊字符)
            String fileName = ParamConfig.bucketName + DateUtil.format(new Date(), "_yyyyMMddHHmmss") + originalFilename;
            minioClient.putObject(ParamConfig.bucketName, fileName, inputStream, putObjectOptions);
            return getPreviewFileUrl(ParamConfig.bucketName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
 
    /**
     * 文件上传
     * 返回下载文件url地址 和下面upload方法传参不同
     * bucketName 也可以直接从ParamConfig对象中获取
     */
    @SneakyThrows(Exception.class)
    public static String upload(String bucketName, String fileName, InputStream stream) {
        minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
        return getPreviewFileUrl(bucketName, fileName);
    }
 
    /**
     * 文件上传
     * 返回下载文件url地址  和上面upload方法传参不同
     */
    @SneakyThrows(Exception.class)
    public static String upload(String bucketName, MultipartFile file) {
        final InputStream is = file.getInputStream();
        final String fileName = file.getOriginalFilename();
        minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
        is.close();
        return getPreviewFileUrl(bucketName, fileName);
    }
 
    /**
     * 删除文件
     *
     * @param bucketName: 桶名
     * @param fileName:   文件名
     */
    @SneakyThrows(Exception.class)
    public static void deleteFile(String bucketName, String fileName) {
        minioClient.removeObject(bucketName, fileName);
    }
 
    /**
     * 下载文件
     */
//    @SneakyThrows(Exception.class)
//    public static void download(String bucketName, String fileName, HttpServletResponse response) {
//        // 获取对象的元数据
//        final ObjectStat stat = minioClient.statObject(bucketName, fileName);
//        response.setContentType(stat.contentType());
//        response.setCharacterEncoding("UTF-8");
//        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//        InputStream is = minioClient.getObject(bucketName, fileName);
//        IOUtils.copy(is, response.getOutputStream());
//        is.close();
//    }
 
    /**
     * 获取minio文件的下载或者预览地址
     * 取决于调用方法方法中的PutObjectOptions对象没有设置contentType
     *
     * @param bucketName: 桶名
     * @param fileName:   文件名
     */
    @SneakyThrows(Exception.class)
    public static String getPreviewFileUrl(String bucketName, String fileName) {
        return minioClient.presignedGetObject(bucketName, fileName);
    }
 
}



@ResponseBody
   @PostMapping("/tFlightFileUpload")
   @ApiOperation(value = "文件上传管理-添加minio")
   public Response add(@RequestParam("file") MultipartFile file) throws IOException {
       String url = MinIoUtil.uploadFile(file);
       return Response.success(url);
   }```



注意:通过minioClient.presignedGetObject(bucketName, fileName) 获取的链接下载还是预览区别是上传文件时是否指定 ContentType属性 
      添加了      putObjectOptions.setContentType(file.getContentType());
      获取的链接就是预览链接Minio支持图片pdf格式文件预览


转自
https://www.cnblogs.com/wffzk/p/15961335.html



原文地址:https://blog.csdn.net/qq_45721148/article/details/129239017

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_19787.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注