首页 > 其他分享 >minio的下载和springboot整合minio使用

minio的下载和springboot整合minio使用

时间:2024-09-12 19:21:01浏览次数:3  
标签:String filePath springframework springboot org import 下载 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数据桶名称

创建好文件和类。

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() {
 
        return 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 = file.getInputStream();
        //文件大小
        long size = file.getSize();
        //文件路径
        String filePath = createFilePath(originalFilename);
        System.out.println(filePath+"\t文件路径");
        //存储方法 putObject
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(bucketName)
                .object(filePath)
                .stream(inputStream, size, -1)
                .contentType(file.getContentType())
                .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("出错了!!!!!");
        }
    }

}

标签:String,filePath,springframework,springboot,org,import,下载,minio
From: https://blog.csdn.net/sdg_advance/article/details/142183445

相关文章

  • 零基础学JAVA-day01-JDK的下载和安装(手把手系列)
    首先我们得知道JDK是什么,JDK(JavaDevelopmentKit)是Java开发工具包,它是开发Java应用程序的基础。JDK包含了编写、编译、调试和运行Java程序所需的所有工具和资源。下载JDK为了开始使用Java编程,你需要在计算机上安装JDK。你可以从Oracle官方网站或其他可信源......
  • [2024-9-12]如何在Z-Library中免费下载书籍讲解流程
    无不良引导,共享知识,书籍乃进步阶梯。一、登录官网https://z-lib.io/按要求进行注册。二、下载Discordhttps://discord.com/经过我的测试网页版应该是没有注册功能的,先下载再注册。三、免费下载书籍搜索图书,点击索取此书。 然后接受邀请,转到help,帮助内容如下:1)H......
  • 【F172】基于Springboot+vue实现的智能菜谱系统
    作者主页:Java码库主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。收藏点赞不迷路 关注作者有好处文末获取源码项目描述近些年,随着中国经济发展,人民的生活质量逐渐提高,对网络的依赖性越来越高,通过网......
  • 让小爱音箱播放电脑/NAS上歌曲,支持自动从哔哩哔哩/油管下载歌曲,无需刷机。支持语音控
    小米AI音箱很多人都有,但使用中播放歌曲时总是提示仅能播放试听版,不能完整听歌,很烦人。今天介绍的方法就是要彻底解决这个问题,实现让小爱AI音箱能够播放本地歌曲,本地没有的歌曲还能自动从网上搜索下载的功能。已测试支持的设备:型号名称L06A小爱音箱L07ARedmi小爱音......
  • Springboot + nacos + k8s 优雅停机
    需要处理的问题至少有一个服务可用K8S配置滚动部署策略服务下线后不再被调度服务关闭时主动下线nacos服务关闭时清理应用里的loadbalance实例列表缓存之前进来的请求可以返回延迟下线,最大可能保证功能结束业务服务配置nacos优雅停机优雅停机配置与最大等待......
  • 基于SpringBoot+Vue的酷听音乐系统设计与实现(SpringBoot+Vue+MySQL+Tomcat)
    文章目录前言系统演示录像论文参考代码运行展示图技术框架SpringBoot技术介绍系统测试系统测试的目的系统功能测试推荐选题:代码参考实现案例找我做程序,有什么保障?联系我们前言......
  • 基于Node.js+vue基于springboot的影视资讯管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着互联网的飞速发展,影视行业迎来了前所未有的繁荣期。海量影视资源的涌现,使得用户对于高效、便捷地获取影视资讯的需求日益增长。传统的影视资讯管理方式......
  • C#.NET实现文件夹的上传和下载
    前端:vue2,vue3,vue-cli,html,jquery后端:asp.net,.netcore数据库:SQLServer,MySQL,Oracle,达梦,人大金仓,国产数据库功能:大文件上传下载,断点续传,文件夹上传下载,加密传输,加密存储,云对象存储该说不说,最近这块挻火的,今天早上又有网友加我微信,实际上我的微信号之前就已经在......
  • MAT(Memory Analyzer Tool)下载和安装
    一、下载官网地址:https://www.eclipse.org/mat/点击download由于要在本地电脑中运行,故选择window64位点击,进入如下页面点击DownLoad可能由于网速的原因,下载失败,故用以前的安装波,如下: 解压: 二、安装点击MemoryAnalyzer.exe,就可以启动MAT工具。启动后界面如下: ......
  • EdrawMax v13 解锁版下载及安装教程 (综合图形图表设计软件)
    前言万兴亿图图示(WondershareEdrawMax)是一款综合图形图表设计软件,Visio国产替代.亿图图示中文版(EdrawMax)是一款办公绘图软件的思维导图软件.无需任何绘图功底,即可轻松创建各类思维导图.亿图图示专家,提供大量事例和在线模板,用于创建流程图,信息图,组织结构图,科学教育插......