• SpringBoot2整合minio


    minio各个操作实例参考:https://github.com/minio/minio-java/tree/master/examples

    1、基础依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>3.0.12</version>
    </dependency>
    

    2、基础配置

    配置要素:地址和端口,登录名,密码,图片Bucket。

    minio:
      endpoint: http://10.0.0.70:9000
      accessKey: admin
      secretKey: admin123456
      bucketNameImage: static-img
    

    文件上传之后,可以基于文件地址直接访问,但是需要在MinIO中配置文件的读写权限:

    3、配置参数类

    @Data
    @Configuration
    public class MinioConfig {
        @Value("${minio.endpoint}")
        private String endpoint;
        @Value("${minio.accessKey}")
        private String accessKey;
        @Value("${minio.secretKey}")
        private String secretKey;
        @Value("${minio.bucketNameImage}")
        private String bucketNameImage ;
    
        @Bean
        public MinioClient minioClient(){
            MinioClient minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();
            return minioClient;
        }
    
    }
    

    4.minio服务工具类

    import com.dkn.config.MinioConfig;
    import io.minio.*;
    import io.minio.http.Method;
    import io.minio.messages.Item;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.concurrent.TimeUnit;
    
    /**
     * 参考 https://github.com/minio/minio-java/tree/master/examples
     */
    
    @Service
    @Slf4j
    public class MinioService {
        @Autowired
        MinioConfig minioConfig;
        @Autowired
        MinioClient minioClient;
    
        //获取列表
        public List<String> listObjects() {
            List<String> list=new ArrayList<>();
            try {
    
                ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder()
                        .bucket(minioConfig.getBucketNameImage())
                        .build();
    
                Iterable<Result<Item>> results =minioClient.listObjects(listObjectsArgs);
                for (Result<Item> result : results) {
                    Item item = result.get();
                    log.info(item.lastModified() + ", " + item.size() + ", " + item.objectName());
                    list.add(item.objectName());
                }
            }catch (Exception e){
                log.error("错误:"+e.getMessage());
            }
            return list;
        }
    
        //删除
        public void deleteObject(String objectName) {
            try {
                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
                        .bucket(minioConfig.getBucketNameImage())
                        .object(objectName)
                        .build();
                minioClient.removeObject(removeObjectArgs);
            }catch (Exception e){
                log.error("错误:"+e.getMessage());
            }
        }
    
        //上传
        public void uploadObject(InputStream is,String fileName,String contentType) {
            try {
                PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                        .bucket(minioConfig.getBucketNameImage())
                        .object(fileName)
                        .contentType(contentType)
                        .stream(is, is.available(), -1)
                        .build();
                minioClient.putObject(putObjectArgs);
                is.close();
            }catch (Exception e){
                log.error("错误:"+e.getMessage());
            }
        }
    
        //获取minio中地址
        public String getObjectUrl(String objectName){
            try {
                GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
                        .method(Method.GET)
                        .bucket(minioConfig.getBucketNameImage())
                        .object(objectName)
                        .expiry(7, TimeUnit.DAYS)
                        .build();
                return minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
            }catch (Exception e){
                e.printStackTrace();
                log.error("错误:"+e.getMessage());
            }
            return "";
        }
    
    
    
        //下载minio服务的文件
        public InputStream getObject(String objectName){
            try {
                GetObjectArgs getObjectArgs = GetObjectArgs.builder()
                        .bucket(minioConfig.getBucketNameImage())
                        .object(objectName)
                        .build();
                return minioClient.getObject(getObjectArgs);
            }catch (Exception e){
                log.error("错误:"+e.getMessage());
            }
            return null;
        }
    
    
    }
    
    

    5.控制器类

    @Slf4j
    @Controller
    public class MinioController {
    
        @Autowired
        MinioService minioService;
    
        @GetMapping("/")
        public String index(){
            return "redirect:/minio/list";
        }
    
        //列表
        @GetMapping("/minio/list")
        public String list(Model model){
            model.addAttribute("list",minioService.listObjects());
            return "list";
        }
    
        //删除
        @GetMapping("/minio/delete")
        @ResponseBody
        public AjaxResult delete(String filename){
            minioService.deleteObject(filename);
            return AjaxResult.success();
        }
    
        //上传文件
        @PostMapping("/minio/upload")
        public String upload(@RequestParam("file") MultipartFile file)  {
            try {
                InputStream is= file.getInputStream(); //得到文件流
                String fileName = file.getOriginalFilename(); //文件名
                String newFileName= System.currentTimeMillis()+"."+ StringUtils.substringAfterLast(fileName,".");
                String contentType = file.getContentType();  //类型
                minioService.uploadObject(is,newFileName,contentType);
            }catch (Exception e){
                log.error("上传失败");
            }
            return "redirect:/minio/list";
        }
    
        //下载minio服务的文件
        @GetMapping("/minio/download")
        public void download(String filename,HttpServletResponse response){
            try {
                InputStream fileInputStream = minioService.getObject(filename);
                response.setHeader("Content-Disposition", "attachment;filename=" + "test.jpg");
                response.setContentType("application/force-download");
                response.setCharacterEncoding("UTF-8");
                IOUtils.copy(fileInputStream,response.getOutputStream());
            }catch (Exception e){
                log.error("下载失败");
            }
        }
        //获取minio文件的下载地址
        @GetMapping("/minio/getHttpUrl")
        @ResponseBody
        public AjaxResult getHttpUrl(String filename){
            try {
                String url = minioService.getObjectUrl(filename);
                return AjaxResult.success(AjaxResult.buildMap("url",url));
            }catch (Exception e){
                return AjaxResult.error();
            }
        }
    
    
    }
    
    

  • 相关阅读:
    3. docker-compose实战--ghost app
    3. nacos服务发现
    1. nacos初识, 和eureka的比较, 在docker上安装nacos
    2.nacos服务配置中心
    如何将PHP对象数组转换成普通数组
    php 通过变量 来调用函数
    linux svn
    Sublime text 3安装svn插件
    php 字符串 定界符 json_last_error()
    centos7 rm -rf 删除文件的找回
  • 原文地址:https://www.cnblogs.com/daikainan/p/14413759.html
Copyright © 2020-2023  润新知