开发者

minio的下载和springboot整合minio使用方法

开发者 https://www.devze.com 2024-09-22 10:29 出处:网络 作者: java炒饭小能手
目录下载minio基于docker拉取minio镜像 创建minio容器 具体使用下载minio 基于docker拉取minio镜像
目录
  • 下载minio
    • 基于docker拉取minio镜像
    •  创建minio容器
  •  具体使用

    下载minio

    基于docker拉取minio镜像

    docker pull minio/minio

     创建minio容器

    先创建/root/minio/data 和 /root/minio/conf

    docker run -d -p 9000:9000 -p 9001:9001 --name minio \

    -e "MINIO_ROOT_USER=htsdg" \

    -e "MINIO_ROOT_PASSWORD=12345678" \

    -v /root/minio/data:/data \     

    -v /root/minio/conf:/root/.minio \

    minio/minio server  --console-address ":9001" /data 

     解释:

    9000为映射端口,9001为控制台访问的端口(端口号可以随意设置),控制台访问路径:

    http://服务器ip地址:9001/login

     接下来就是用户和密码,如何就是minio的数据和配置文件所挂载的目录(可以自己设置成/../....../data 和 /../....../conf)

     具体使用

    导入需要的依赖

            <dependency>
                <groupId>io.minio</groupId>
                <artifactId>minio</artifactId>
                <version>8.2.2</version>
            </dependency>
            <dependency>
                <groupId>Javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>

     在yml文件中配置:

    minio:
      endpoint: http://********:9000 #Minio服务所在地址
      AccessKey: htsdg                #连接Minio用户名
      secretKey: 12345678               #连接Minio密码
      bucketName: bt01              #Minio数据桶名称

    创建好文件和类。

    minio的下载和springboot整合minio使用方法

    MinIoConfig类:

    package com.htsdg.Properties;
    import io.minio.MinioClient;
    import lombok.Data;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    @Data
    @Configuration
    @ConfigurationProperties(prefix = "minio")
    public class MinIoConfig {
        /**
         * 访问用户
         */
        @Value("${minio.accessKey}")
        private String accessKey;
        /**
         * 密钥
         */
        @Value("${minio.secretKey}")
        private String secretKey;
        /**
         * 访问api Url
         */
        @Value("${minio.endpoint}")
        private String endpoint;
        /**
         * 桶名称
         */
        @Value("${minio.bucketName}")
        private String bucketName;
        /**
         * 创建MinIo客户端
         *
         * @return
         */
        @Bean
        public MinioClient minioClient() {
            returnandroid MinioClient.builder()
                    .endpoint(endpoint)
                    .credentials(accessKey, secretKey)
                    .build();
        }
    }

    MinIOUtil类:

    这里我就使用了一个bucket,你需要先去控制台创建一个bucket,我这里创建的是bt01。我的上传之后的文件路径是 xycj/原文件名

    package com.htsdg.utils;
    import io.minio.GetObjectArgs;
    import io.minio.MinioClient;
    import io.minio.PutObjectArgs;
    import io编程客栈.minio.errors.*;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.URLEncoder;
    import java.security.InvalidKeyException;
    import java.security.NoSuchAlgorithmException;
    @Component
    public class MinIOUtil {
        @Autowired
        private MinioClient minioClient;
        /**
         *  桶名称
         */
        @Value("${minio.bucketName}")
        private String bucketName;
        /**
         * putObject上传文件
         *
         * @param file 文件
         * @return filePath
         */
        public String putObject(MultipartFile file) throws IOException, ServerException, InsufficientDataException, InternalException, InvalidResponseException, InvalidKeyException, NoSuchAlgorithmException, XMLParserException, ErrorResponseException {
            //文件名
            String originalFilename = file.getOriginalFilename();
            //文件流
            InputStream inputStream = www.devze.comfile.getInputStream();
            //文件大小
            long size = file.getSize();
            //文件路径
            String filePath = createFilePath(originalFilename);
            System.out.println(filePath+"\t文件路径");
            //存储方法 putObject
            minioClient.putObject(PutObjectArgs.builder()
         php           .bucket(bucketName)
                    .object(filePath)
                    .stream(inputStream, size, -1)
                    .contentType(file.getContewww.devze.comntType())
                    .build());
            return filePath;
        }
        /**
         * 下载文件
         *
         * @param filePath 文件路径
         */
        public void getObject(HttpServletResponse httpServletResponse, String filePath) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
            String fileName = getFileName(filePath);
            InputStream inputStream = minioClient.getObject(GetObjectArgs.builder()
                    .bucket(bucketName)
                    .object(filePath)
                    .build());
            downloadFile(httpServletResponse, inputStream, fileName);
        }
        /**
         * 获取文件路径
         *
         * @param originalFilename 原始文件名称
         * @return FilePath
         */
        public String createFilePath(String originalFilename) {
            return "xycj/" + originalFilename;
        }
        /**
         * 根据文件路径获取文件名称
         *
         * @param filePath 文件路径
         * @return 文件名
         */
        public String getFileName(String filePath) {
            String[] split = StringUtils.split(filePath, "/");
            return split[split.length - 1];
        }
        /**
         * 下载文件
         *
         * @param httpServletResponse httpServletResponse
         * @param inputStream         inputStream
         * @param fileName            文件名
         * @throws IOException IOException
         */
        public void downloadFile(HttpServletResponse httpServletResponse, InputStream inputStream, String fileName) throws IOException {
            //设置响应头信息,告诉前端浏览器下载文件
            httpServletResponse.setContentType("application/octet-stream;charset=UTF-8");
            httpServletResponse.setCharacterEncoding("UTF-8");
            httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
            //获取输出流进行写入数据
            OutputStream outputStream = httpServletResponse.getOutputStream();
            // 将输入流复制到输出流
            byte[] buffer = new byte[4096];
            int bytesRead = -1;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            // 关闭流资源
            inputStream.close();
            outputStream.close();
        }
    }

    controller层:

    这里就演示个上传吧。

    package com.htsdg.controller;
    import com.htsdg.utils.MinIOUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    @RestController
    public class MinioController {
        @Autowired
        private MinIOUtil minIOUtil;
        /**
         * 通用上传请求
         */
        @PostMapping("/upload")
        public void uploadFile(MultipartFile file) throws Exception {
            minIOUtil.putObject(file);
            System.out.println("yes");
        }
        @GetMapping("/download")
        public void download(HttpServletResponse response, @RequestParam(value = "filepath") String filepath) throws IOException {
            try {
                minIOUtil.getObject(response, filepath);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                System.out.println("出错了!!!!!");
            }
        }
    }

    到此这篇关于minio的下载和springboot整合minio使用方法的文章就介绍到这了,更多相关springboot整合minio使用内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    没有了:下一篇

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号