minio安裝部署及使用的詳細(xì)過程
一、服務(wù)器安裝minio
1.進(jìn)行下載
下載地址:
GNU/Linux
https://dl.min.io/server/minio/release/linux-amd64/minio
2.新建minio安裝目錄,執(zhí)行如下命令
mkdir -p /home/minio/data
把二進(jìn)制文件上傳到安裝目錄后,執(zhí)行:
chmod +x minio //給予權(quán)限 export MINIO_ACCESS_KEY=minioadmin //創(chuàng)建賬號 export MINIO_SECRET_KEY=minioadmin //創(chuàng)建密碼 ./minio server /home/minio/data //啟動
后臺啟動,并打印日志
nohup ./minio server /home/minio/data > /home/minio/data/minio.log &
默認(rèn)的端口為:9000
自定義端口方式:自定義啟動端口號以及控制臺端口號,不設(shè)置則控制臺會自動配置其他端口號,非常不方便
nohup ./minio server --address :9000 --console-address :9001 /home/minio/data > /home/minio/data/minio.log &
查看狀態(tài)
ps -ef|grep minio
二、進(jìn)行訪問,并設(shè)置桶
1.訪問
地址:http://127.0.0.1:9000
輸入賬號密碼后:
進(jìn)行創(chuàng)建桶,名字自取,創(chuàng)建完成后服務(wù)器home/minio/data下也會創(chuàng)建這個(gè)文件目錄
進(jìn)行設(shè)置:
必須將規(guī)則設(shè)置成readwrite ,才可進(jìn)行讀取文件,否則只存或者只能讀。
三、springboot進(jìn)行實(shí)現(xiàn)
1.引入依賴
<!-- minio 相關(guān)依賴 --> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>3.0.10</version> </dependency> <!-- alibaba的fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.51</version> </dependency> <!-- thymeleaf模板引擎 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2.在 application.yml 文件中加入 MinIO 服務(wù)器的相關(guān)信息
# minio 文件存儲配置信息 minio: endpoint: http://127.0.0.1:9000 accesskey: minioadmin secretKey: minioadmin
3.創(chuàng)建實(shí)體類
這一步,我們將配置文件中 minio 的配置信息通過注解的方式注入到 MinioProp 這個(gè)實(shí)體中,方便后面我們使用
import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * minio 屬性值 */ @Data @Component @ConfigurationProperties(prefix = "minio") public class MinioProp { /** * 連接url */ private String endpoint; /** * 用戶名 */ private String accesskey; /** * 密碼 */ private String secretKey; }
4.創(chuàng)建核心配置類
通過注入 MinIO 服務(wù)器的相關(guān)配置信息,得到 MinioClient 對象,我們上傳文件依賴此對象
import io.minio.MinioClient; import io.minio.errors.InvalidEndpointException; import io.minio.errors.InvalidPortException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * minio 核心配置類 */ @Configuration @EnableConfigurationProperties(MinioProp.class) public class MinioConfig { @Autowired private MinioProp minioProp; /** * 獲取 MinioClient * * @return * @throws InvalidPortException * @throws InvalidEndpointException */ @Bean public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException { return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey()); } }
5.上傳工具類
import com.alibaba.fastjson.JSONObject; import com.zyxx.email.common.redis.RedisUtil; import com.zyxx.email.utils.DateUtils; import io.minio.MinioClient; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; @Slf4j @Component public class MinioUtils { @Autowired private MinioClient client; @Autowired private MinioProp minioProp; /** * 創(chuàng)建bucket * * @param bucketName bucket名稱 */ @SneakyThrows public void createBucket(String bucketName) { if (!client.bucketExists(bucketName)) { client.makeBucket(bucketName); } } /** * 上傳文件 * * @param file 文件 * @param bucketName 存儲桶 * @return */ public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception { JSONObject res = new JSONObject(); res.put("code", 0); // 判斷上傳文件是否為空 if (null == file || 0 == file.getSize()) { res.put("msg", "上傳文件不能為空"); return res; } try { // 判斷存儲桶是否存在 createBucket(bucketName); // 文件名 String originalFilename = file.getOriginalFilename(); // 新的文件名 = 存儲桶名稱_時(shí)間戳.后綴名 String fileName = bucketName + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf(".")); // 開始上傳 client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType()); res.put("code", 1); res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName); return res; } catch (Exception e) { log.error("上傳文件失敗:{}", e.getMessage()); } res.put("msg", "上傳失敗"); return res; } }
6.controller接口
import com.alibaba.fastjson.JSONObject; import com.zyxx.email.common.minio.MinioUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @Controller public class MinioController { @Autowired private MinioUtils minioUtils; /** * 上傳 * * @param file * @param request * @return */ @PostMapping("/upload") @ResponseBody public String upload(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) { JSONObject res = null; try { res = minioUtils.uploadFile(file, "product"); } catch (Exception e) { e.printStackTrace(); res.put("code", 0); res.put("msg", "上傳失敗"); } return res.toJSONString(); } }
測試
通過網(wǎng)址進(jìn)行訪問:
PostMan進(jìn)行測試上傳;
刪除文件:
//文件刪除 @DeleteMapping public String delete(String name) { try { MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY); minioClient.removeObject(BUCKETNAME, name); } catch (Exception e) { return "刪除失敗"+e.getMessage(); } return "刪除成功"; }
總結(jié)
到此這篇關(guān)于minio安裝部署及使用的文章就介紹到這了,更多相關(guān)minio安裝部署使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解SpringMVC和MyBatis框架開發(fā)環(huán)境搭建和簡單實(shí)用
這篇文章主要介紹了詳解SpringMVC和MyBatis框架開發(fā)環(huán)境搭建和簡單實(shí)用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05利用Spring JPA中的@Version注解實(shí)現(xiàn)樂觀鎖
樂觀鎖是數(shù)據(jù)庫和應(yīng)用程序中使用的一種并發(fā)控制策略,用于在多個(gè)事務(wù)嘗試更新單個(gè)記錄時(shí)確保數(shù)據(jù)完整性,Java Persistence API (JPA) 提供了一種借助@Version注解在 Java 應(yīng)用程序中實(shí)現(xiàn)樂觀鎖的機(jī)制,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下2023-11-11springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼
Easy-Es是一款基于ElasticSearch官方提供的RestHighLevelClient打造的低碼開發(fā)框架,本文主要介紹了springboot整合easy-es實(shí)現(xiàn)數(shù)據(jù)的增刪改查的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Java中的lambda和stream實(shí)現(xiàn)排序
這篇文章主要介紹了Java中的lambda和stream實(shí)現(xiàn)排序,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09使用IDEA直接連接MySQL數(shù)據(jù)庫的方法
這篇文章主要介紹了如何使用IDEA直接連接MySQL數(shù)據(jù)庫,首先需要新建一個(gè)空項(xiàng)目,第一次連接 需要先下載驅(qū)動,文中給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-04-04