当前位置: 首页 > news >正文

minio的下载和springboot整合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*/@Beanpublic 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 {@Autowiredprivate 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文件路径");//存储方法 putObjectminioClient.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 {@Autowiredprivate 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("出错了!!!!!");}}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Docker容器技术1——docker基本操作
  • 线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结
  • 天童教育:课外阅读图书推荐
  • C++20 新特征:概念(Concepts)全面解析
  • Qt实现登录界面
  • Spark的介绍
  • 【高中数学/基本不等式】已知ab皆为正实数,且(a+5b)*(2a+b)=36,求a+2b之最小值?
  • Unet改进30:添加CAA(2024最新改进方法)|上下文锚定注意模块来捕获远程上下文信息。
  • USB摄像头视频流转RTSP流
  • Python | Leetcode Python题解之第401题二进制手表
  • Python世界:基于PESQ的自动化语音打分脚本实践
  • 2024全球数字电影摄像机、相机、广播摄像机市场报告
  • 两个网站访问统计系统的访客页面访问轨迹停留对比
  • 揭开OpenAI草莓模型神秘面纱——重塑大语言模型的逻辑能力
  • 专注LabVIEW 做好一件事
  • 30秒的PHP代码片段(1)数组 - Array
  • DataBase in Android
  • Flannel解读
  • Linux Process Manage
  • Octave 入门
  • ReactNativeweexDeviceOne对比
  • Redis的resp协议
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SQL 难点解决:记录的引用
  • 搞机器学习要哪些技能
  • 来,膜拜下android roadmap,强大的执行力
  • 你不可错过的前端面试题(一)
  • 强力优化Rancher k8s中国区的使用体验
  • 如何在 Tornado 中实现 Middleware
  • 设计模式走一遍---观察者模式
  • 小试R空间处理新库sf
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一文看透浏览器架构
  • 正则学习笔记
  • Nginx实现动静分离
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (12)目标检测_SSD基于pytorch搭建代码
  • (27)4.8 习题课
  • (poj1.2.1)1970(筛选法模拟)
  • (译)计算距离、方位和更多经纬度之间的点
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)Linq学习笔记
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth
  • .Net中间语言BeforeFieldInit
  • [ 转载 ] SharePoint 资料
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [Android]使用Android打包Unity工程
  • [Android]使用Git将项目提交到GitHub
  • [Assignment] C++1
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [Contiki系列论文之2]WSN的自适应通信架构
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images