minio的下載和springboot整合minio使用方法
下載minio
基于docker拉取minio鏡像
docker pull minio/minio
創(chuàng)建minio容器
先創(chuàng)建/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為控制臺(tái)訪問的端口(端口號(hào)可以隨意設(shè)置),控制臺(tái)訪問路徑:
http://服務(wù)器ip地址:9001/login
接下來(lái)就是用戶和密碼,如何就是minio的數(shù)據(jù)和配置文件所掛載的目錄(可以自己設(shè)置成/../....../data 和 /../....../conf)
具體使用
導(dǎo)入需要的依賴
<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服務(wù)所在地址 accessKey: htsdg #連接Minio用戶名 secretKey: 12345678 #連接Minio密碼 bucketName: bt01 #Minio數(shù)據(jù)桶名稱
創(chuàng)建好文件和類。
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; /** * 創(chuàng)建MinIo客戶端 * * @return */ @Bean public MinioClient minioClient() { return MinioClient.builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); } }
MinIOUtil類:
這里我就使用了一個(gè)bucket,你需要先去控制臺(tái)創(chuàng)建一個(gè)bucket,我這里創(chuàng)建的是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文件路徑"); //存儲(chǔ)方法 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; } /** * 根據(jù)文件路徑獲取文件名稱 * * @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 { //設(shè)置響應(yīng)頭信息,告訴前端瀏覽器下載文件 httpServletResponse.setContentType("application/octet-stream;charset=UTF-8"); httpServletResponse.setCharacterEncoding("UTF-8"); httpServletResponse.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); //獲取輸出流進(jìn)行寫入數(shù)據(jù) OutputStream outputStream = httpServletResponse.getOutputStream(); // 將輸入流復(fù)制到輸出流 byte[] buffer = new byte[4096]; int bytesRead = -1; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } // 關(guān)閉流資源 inputStream.close(); outputStream.close(); } }
controller層:
這里就演示個(gè)上傳吧。
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; /** * 通用上傳請(qǐng)求 */ @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("出錯(cuò)了?。。。?!"); } } }
到此這篇關(guān)于minio的下載和springboot整合minio使用方法的文章就介紹到這了,更多相關(guān)springboot整合minio使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot整合Minio實(shí)現(xiàn)圖片上傳功能
- SpringBoot整合Minio實(shí)現(xiàn)文件上傳和讀取功能
- springboot整合minio的超詳細(xì)教程
- 可能是全網(wǎng)最詳細(xì)的springboot整合minio教程
- SpringBoot整合MinIO實(shí)現(xiàn)文件上傳的方法詳解
- Spring?Boot?3?整合?MinIO?實(shí)現(xiàn)分布式文件存儲(chǔ)的全過(guò)程
- SpringBoot+MinIO實(shí)現(xiàn)對(duì)象存儲(chǔ)方式
- Vue?+?SpringBoot?實(shí)現(xiàn)文件的斷點(diǎn)上傳、秒傳存儲(chǔ)到Minio的操作方法
- 在 Spring Boot 中集成 MinIO 對(duì)象存儲(chǔ)
相關(guān)文章
關(guān)于Java的Condition接口最佳理解方式
這篇文章主要介紹了關(guān)于Java的Condition接口最佳理解方式,Condition就是實(shí)現(xiàn)了管程里面的條件變量,Java?語(yǔ)言內(nèi)置的管程里只有一個(gè)條件變量,而Lock&Condition實(shí)現(xiàn)的管程支持多個(gè)條件變量,需要的朋友可以參考下2023-05-05Java Swing JSlider滑塊的實(shí)現(xiàn)示例
這篇文章主要介紹了Java Swing JSlider滑塊的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12學(xué)習(xí)SpringBoot容器功能及注解原理
這篇文章主要介紹了學(xué)習(xí)SpringBoot容器功能及注解原理,文中通過(guò)詳細(xì)的代碼示例對(duì)SpringBoot容器功能及注解原理進(jìn)行了解析,有需要的朋友可以借鑒參考下2021-09-09Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解
這篇文章主要介紹了Java 內(nèi)置Http Server構(gòu)建web應(yīng)用案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09Springboot集合前端實(shí)現(xiàn)進(jìn)度條顯示功能實(shí)例
這篇文章主要介紹了使用進(jìn)度條提升用戶體驗(yàn)的原因,特別是在處理大文件上傳、下載或長(zhǎng)時(shí)間運(yùn)行的操作時(shí),進(jìn)度條通過(guò)實(shí)時(shí)反饋任務(wù)進(jìn)度,減少用戶的不確定感,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2024-11-11關(guān)于jackson序列化和feign返回值的問題
這篇文章主要介紹了關(guān)于jackson序列化和feign返回值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03簡(jiǎn)單講解Java設(shè)計(jì)模式編程中的單一職責(zé)原則
這篇文章主要介紹了Java設(shè)計(jì)模式編程中的單一職責(zé)原則,這在團(tuán)隊(duì)開發(fā)編寫接口時(shí)經(jīng)常使用這樣的約定,需要的朋友可以參考下2016-02-02