Minio保姆級教程

轉載自:www.javaman.cn

Minio服務器搭建和整合

1、centos安裝minio

1.1、創建安裝目錄

mkdir -p /home/minio

1.2、在線下載minio

#進入目錄
cd /home/minio
#下載
wget https://dl.minio.io/server/minio/release/linux-amd64/minio

在這里插入圖片描述

1.3、minio配置

1.3.1、添加執行權限
#進入目錄
cd /home/minio
#添加執行權限
chmod +x minio
1.3.2、創建minio存儲文件夾(該文件夾就是Buckets目錄)
mkdir -p /data/minio/book
1.3.3、創建minio配置文件

編寫minio配置文件,修改下面代碼,wq保存

vim /etc/default/minio#內容如下
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin"
MINIO_VOLUMES="/data/minio/book"
MINIO_OPTS="--address 0.0.0.0:9000"
MINIO_OPTS1="--console-address 0.0.0.0:39249"
1.3.4、設置開機啟動
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target[Service]
WorkingDirectory=/usr/local/
User=minio
Group=minio
EnvironmentFile=-/usr/local/etc/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS /data/minio
Restart=always
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
1.3.4、啟動
#加載配置
systemctl daemon-reload
#啟動minio
systemctl start minio.service
#開啟開機自啟
systemctl enable minio.service
#查看啟動狀態
systemctl status minio.service

如下圖,代表啟動成功

在這里插入圖片描述

如果是使用的ecs服務器,需要在安全管理里面把9001和控制臺端口(目前使用的是39249,可以在1.3.3步驟配置文件里修改)

1.3.5、登錄控制臺

瀏覽器輸入地址:http://IP:39249/login,用戶名密碼為配置文件(MINIO_ROOT_USER="minioadmin"MINIO_ROOT_PASSWORD=“minioadmin”)

在這里插入圖片描述

1.3.6、minio配置

1、主界面如下:

在這里插入圖片描述

2、點擊book,進入buckets的詳細信息

在這里插入圖片描述

在這里插入圖片描述

2、創建access keys訪問密鑰,主要用于程序連接的時候進行安全控制在這里插入圖片描述

2、springboot整合minio

2.1、pom.xml

<!-- minio圖片服務器 -->
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>${minio.version}</version>
</dependency>

2.2、配置yaml.xml文件

minio:endpoint: http://Ip:9000accessKey: 2Oo1pE1YHEFTU3eojldN1secretKey: 2Z5dJ7EHkd5WOYzK7wxtHPkye2Tc824xWzqPzHd7TbucketName: book  ##對應buckets

2.3、編寫properties組件,用于讀取yaml配置生成bean

package com.ds.core.config.properties;import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = MinioProperties.PREFIX)
public class MinioProperties
{public static final String PREFIX = "minio";/*** ip:minio地址*/private String endpoint;/*** 賬號*/private String accessKey;/*** 秘鑰*/private String secretKey;/*** bucketName*/private String bucketName;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}
}

2.4、編寫MinioService

提供一個簡單的方式來與MinIO服務器交互,執行基本的存儲桶和文件操作。

package com.ds.blog.system.service;import com.ds.core.config.properties.MinioProperties;
import io.minio.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.UUID;@Service
public class MinioService {@Autowiredprivate MinioClient minioClient;@Autowiredprivate MinioProperties minioProperties;//創建存儲桶: createBucket方法用于創建一個新的存儲桶(如果它還不存在)。存儲桶是MinIO中用于存儲對象的容器。public void createBucket(String bucketName) throws Exception{if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}}//上傳文件: uploadFile方法允許用戶上傳一個文件到指定的存儲桶。文件名被修改為一個隨機的UUID加上原始文件的擴展名,這有助于避免文件名沖突。上傳后,返回一個URL,該URL可以用來訪問上傳的文件public String uploadFile(String bucketName, MultipartFile file) throws Exception {String filename = UUID.randomUUID().toString()+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(filename).stream(file.getInputStream(), file.getInputStream().available(), -1).contentType(file.getContentType()).build());return minioProperties.getEndpoint() + "/" + bucketName + "/" + filename;}//下載文件: downloadFile方法允許用戶下載指定存儲桶中的文件,并返回該文件的輸入流。public InputStream downloadFile(String bucketName, String filename) throws Exception {return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(filename).build());}
}

2.5、文件上傳controller

package com.ds.blog.system.base;import com.ds.blog.system.service.MinioService;
import com.ds.common.domain.Result;
import com.ds.core.config.properties.MinioProperties;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;@RestController
public class MinioController {@Resourceprivate MinioService minioService;@Resourceprivate MinioProperties minioProperties;@PostMapping("/file/upload")public Result upload(MultipartFile file) throws Exception {String s = minioService.uploadFile(minioProperties.getBucketName(), file);return Result.success(s);}}

2.6、前端請求路徑

$.ajax({url: ctx + '/file/upload',// 上傳文件的后端接口type: 'POST', // 請求類型為POSTdata: formData, // 使用FormData對象作為數據processData: false, // 不對數據進行處理contentType: false, // 不設置請求頭的Content-Typesuccess: function (response) {// 上傳成功后的處理imgSrc = response.message;callback(imgSrc)},error: function (xhr, status, error) {// 上傳失敗時的處理console.log('文件上傳失敗', error);}});

2.7、最終效果

http://ip:9000后面的book就是我們創建的book桶,數據在控制臺也能看到

在這里插入圖片描述

在這里插入圖片描述

2.8、問題

如果前端圖片或者文件無法顯示,是因為我們需要將桶的策略(policy)換成public,改完前端就可以正常顯示了
在這里插入圖片描述

2.9、防盜鏈

配置CORS(跨域資源共享)

通過配置CORS,你可以限制哪些域可以訪問你的MinIO服務器。這可以防止未經授權的第三方網站嵌入你的資源。

示例:

在MinIO的配置文件中,你可以添加CORS配置來限制訪問。以下是一個允許來自https://example.com的GET請求的示例:

<CorsConfig>  <CorsRule>  <AllowedOrigin>https://example.com</AllowedOrigin>  <AllowedMethod>GET</AllowedMethod>  <AllowedHeader>*</AllowedHeader>  <ExposeHeader>*</ExposeHeader>  </CorsRule>  
</CorsConfig>

你可以根據需求添加更多的<AllowedOrigin><AllowedMethod>元素來定義不同的規則。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/210783.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210783.shtml
英文地址,請注明出處:http://en.pswp.cn/news/210783.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flutter筆記:滑塊及其實現分析1

Flutter筆記 滑塊分析1 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 郵箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134900784 本文從設計角度&#…

SQL命令---刪除字段

介紹 使用sql語句刪除表字段。 命令 alter table 表名 drop 字段名;例子 刪除a表中的name字段。 alter table a drop name;下面是執行刪除后的表結構&#xff1a;

微服務實戰系列之通信

前言 掰個指頭數一數&#xff0c;博主的“微服務實戰系列”從無到有&#xff0c;從零走到了十五。如果比作時鐘&#xff0c;剛好走過了一刻度。 當初為什么要做這個系列&#xff0c;博主想了又想&#xff0c;私以為作為當下軟件領域的幾個“hot spot”之一&#xff0c;又乘著…

探秘機器學習核心邏輯:梯度下降的迭代過程 (圖文詳解)

一 需求解函數 f() 和 g()函數分別為求y值和求導數的函數。 目的&#xff1a;求該函數的最小值&#xff1a; 代碼&#xff1a; import numpy as np import matplotlib.pyplot as plt f lambda x : (x - 3.5) ** 2 - 4.5 * x 10 g lambda x : 2 * (x - 3.5) - 4.5x np.l…

架構LAMP

目錄 1.什么是LAMP 2.LAMP組成及作用 3.搭建Apache httpd服務 4.編譯安裝mysqld 服務 5.編譯安裝PHP 解析環境 6.安裝論壇 1.什么是LAMP LAMP架構是目前成熟的企業網站應用模式之一&#xff0c;指的是協同工作的一整套系統和相關軟件&#xff0c;能夠提供動態Web站點服務…

MATLAB算法實戰應用案例精講-【人工智能】漫談自動駕駛

目錄 常用數據集 一、自動駕駛領域數據集 1. KITTI數據集 2.CityScapes數據集 3.BDD100K數據集

go與ioc

在Go開發服務端程序時&#xff0c;使用IoC&#xff08;Inversion of Control&#xff09;機制并不像在Java等語言中那樣普遍。Go語言的設計哲學傾向于簡潔和直接&#xff0c;更注重代碼的可讀性和可維護性。 在Go中&#xff0c;通常會使用依賴注入&#xff08;Dependency Inje…

【Python】視頻剪輯小程序

近期遇到一些錄制的視頻需要剪輯。 手機上剪輯操作很耗時&#xff0c;有幾個G的視頻&#xff0c;花了一天的空余時間去剪輯。電腦上也有格式工廠&#xff0c;有很方便。 可是學了Pthon&#xff0c;又無意中了解到了moviepy這個庫&#xff0c;于是自己寫了個簡單的視頻剪輯程序。…

Windows安裝kafka

壓縮包下載地址&#xff1a;https://www.apache.org/dyn/closer.cgi?path/kafka/3.6.1/kafka_2.13-3.6.1.tgz 啟動kafka步驟 zookeeper-server-start.bat rem 閉命令提示符窗口的命令回顯&#xff0c;這樣在運行腳本時不會顯示腳本的具體命令內容 echo offrem 命令行啟動未…

Proteus仿真--8×8LED點陣屏仿電梯數字滾動顯示

本文介紹基于88LED點陣屏仿電梯數字滾動顯示設計&#xff08;完整仿真源文件及代碼見文末鏈接&#xff09; 仿真圖如下 其中K1-K5的5個按鍵分別代表不同樓層&#xff0c;摁下按鍵后在8X8LED上便會顯示到對應樓層的跳變信息&#xff0c;模擬電梯的運作 仿真運行視頻 Proteus仿…

nodejs多線程,fork和Worker

一、前言 javascript是單線程執行的&#xff0c;如果想要多線程執行&#xff0c;那么相當于再運行一個node,其實不該理解成多線程&#xff0c;更像是多進程。 二、Worker(‘worker_threads’模塊) worker有點類似exec&#xff0c;直接再cmd執行node命令&#xff0c;不同的是兩…

《安富萊嵌入式周報》第328期:自主微型機器人,火星探測器發射前失誤故障分析,微軟推出12周24期免費AI課程,炫酷3D LED點陣設計,MDK5.39發布

周報匯總地址&#xff1a;嵌入式周報 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬漢嵌入式論壇 - Powered by Discuz! 更新一期視頻教程&#xff1a; 【實戰技能】 單步運行源碼分析&#xff0c;一期視頻整明白FreeRTOS內核源碼框架和運行…

【STM32】TIM定時器基本定時功能

第一部分&#xff1a;定時器基本定時的功能&#xff1b; 第二部分&#xff1a;定時器的輸出比較功能&#xff1b; 第三部分&#xff1a;定時器輸入捕獲的功能&#xff1b; 第四部分&#xff1a;定時器的編碼接口。 1 TIM簡介 TIM&#xff08;Timer&#xff09;定時器&#…

在OpenCV基于深度學習的超分辨率模型實踐

1. 引言 OpenCV是一個開源的計算機視覺庫&#xff0c;擁有大量優秀的算法。基于最新的合并&#xff0c;OpenCV包含一個易于使用的接口&#xff0c;主要用于實現基于深度學習方法的超分辨率&#xff08;SR&#xff09;。該接口包含預先訓練的模型&#xff0c;這些模型可以非常容…

redis中使用事務保護數據完整性

事務是指一個執行過程&#xff0c;要么全部執行成功&#xff0c;要么失敗什么都不改變。不會存在一部分成功一部分失敗的情況&#xff0c;也就是事務的ACID四大特性&#xff08;原子性、一致性、隔離性、持久性&#xff09;。但是redis中的事務并不是嚴格意義上的事務&#xff…

使用flutter_native_splash替換啟動圖片,iOS端替換不成功

使用flutter_native_splash替換啟動圖片&#xff0c;iOS端替換不成功 1、刪除App重啟手機&#xff1b;2、重新創建一個新的LaunchScreen.storyboard&#xff0c;比如命名為NewLaunchScreen.storyboard&#xff0c;在General里面設置Launch Screen File為這個新的NewLaunchScree…

藍橋杯 day01 奇怪的數列

題目描述 奇怪的數列 從 X 星截獲一份電碼&#xff0c;是一些數字&#xff0c;如下&#xff1a; 13 1113 3113 132113 1113122113 ?? YY 博士經徹夜研究&#xff0c;發現了規律&#xff1a; 第一行的數字隨便是什么&#xff0c;以后每一行都是對上一行"讀出來…

智能優化算法應用:基于蝗蟲算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于蝗蟲算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于蝗蟲算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.蝗蟲算法4.實驗參數設定5.算法結果6.參考文獻7.MA…

【數據挖掘】國科大蘇桂平老師數據庫新技術課程作業 —— 第二次作業

1 設 F { A B → C , B → D , C D → E , C E → G H , G → A } F\{AB\rightarrow C,B\rightarrow D, CD\rightarrow E, CE\rightarrow GH, G\rightarrow A \} F{AB→C,B→D,CD→E,CE→GH,G→A}&#xff0c;用推理的方法證明 F ∣ A B → G F\;|AB\rightarrow G F∣AB→…

持續集成交付CICD:使用Maven命令上傳Nexus制品

目錄 一、實驗 1.使用Maven命令上傳Nexus制品&#xff08;第一種方式&#xff09; 2.使用Maven命令上傳Nexus制品&#xff08;第二種方式&#xff09; 一、實驗 1.使用Maven命令上傳Nexus制品&#xff08;第一種方式&#xff09; &#xff08;1&#xff09;指定一個 hoste…