minio的下载和springboot整合minio使用方法
作者:java炒饭小能手
本文介绍了如何通过Docker拉取MinIO镜像,并创建MinIO容器的过程,首先,需要在本地创建/data和/conf两个目录用于挂载MinIO的数据和配置文件,接下来,通过docker run命令启动容器,设置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("出错了!!!!!"); } } }
到此这篇关于minio的下载和springboot整合minio使用方法的文章就介绍到这了,更多相关springboot整合minio使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!