日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用docker搭建minio服務(wù)

倩倩 ? 來源:CSDN ? 作者:CSDN ? 2022-09-23 11:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


什么是minio

引用官網(wǎng):

MinIO是根據(jù)GNU Affero通用公共許可證v3.0發(fā)布的高性能對象存儲。它與Amazon S3云存儲服務(wù)兼容。使用MinIO構(gòu)建用于機(jī)器學(xué)習(xí),分析和應(yīng)用程序數(shù)據(jù)工作負(fù)載的高性能基礎(chǔ)架構(gòu)。

官網(wǎng)地址:

https://min.io/

文檔地址:

https://docs.min.io/

基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

一. 使用docker 搭建minio 服務(wù)。

GNU / Linux和macOS

dockerrun-p9000:9000
--nameminio1
-v/mnt/data:/data
-e"MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE"
-e"MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
minio/minioserver/data

windows

dockerrun-p9000:9000
--nameminio1
-vD:data:/data
-e"MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE"
-e"MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
minio/minioserver/data
  • MINIO_ROOT_USER:為用戶key
  • MINIO_ROOT_PASSWORD:為用戶密鑰

以上搭建的都是單機(jī)版的。想要了解分布式 的方式請查看官網(wǎng)文檔。

a62be472-3ae9-11ed-9e49-dac502259ad0.png

這就是在win的docker上運(yùn)行的。

當(dāng)啟動后在瀏覽器訪問http://localhost:9000就可以訪問minio的圖形化界面了,如圖所示:

a65eb08c-3ae9-11ed-9e49-dac502259ad0.pnga6875ba4-3ae9-11ed-9e49-dac502259ad0.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺管理系統(tǒng) + 用戶小程序,支持 RBAC 動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能

  • 項(xiàng)目地址:https://gitee.com/zhijiantianya/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

二. 下面開始搭建springboot 環(huán)境

初始化一個(gè)springboot項(xiàng)目大家都會,這里不多做介紹。

主要是介紹需要引入的依賴:


<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>

<dependency>
<groupId>io.miniogroupId>
<artifactId>minioartifactId>
<version>8.2.1version>
dependency>

<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>

依賴可以官方文檔里找:https://docs.min.io/docs/java-client-quickstart-guide.html

下面介紹配置文件:

spring:
servlet:
multipart:
max-file-size:10MB
max-request-size:10MB
#minio配置
minio:
access-key:AKIAIOSFODNN7EXAMPLE#key就是docker初始化是設(shè)置的,密鑰相同
secret-key:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
url:http://localhost:9000
bucket-name:wdhcr
thymeleaf:
cache:false

創(chuàng)建minio的配置類:

@Configuration
@ConfigurationProperties(prefix="spring.minio")
@Data
publicclassMinioConfiguration{
privateStringaccessKey;

privateStringsecretKey;

privateStringurl;

privateStringbucketName;

@Bean
publicMinioClientminioClient(){
returnMinioClient.builder()
.endpoint(url)
.credentials(accessKey,secretKey)
.build();
}
}

使用配置屬性綁定進(jìn)行參數(shù)綁定,并初始化一個(gè)minio client對象放入容器中。

下面就是我封裝的minio client 操作minio的簡單方法的組件。

@Component
publicclassMinioComp{

@Autowired
privateMinioClientminioClient;

@Autowired
privateMinioConfigurationconfiguration;

/**
*@description:獲取上傳臨時(shí)簽名
*@dateTime:2021/5/1314:12
*/
publicMapgetPolicy(StringfileName,ZonedDateTimetime){
PostPolicypostPolicy=newPostPolicy(configuration.getBucketName(),time);
postPolicy.addEqualsCondition("key",fileName);
try{
Mapmap=minioClient.getPresignedPostFormData(postPolicy);
HashMapmap1=newHashMap<>();
map.forEach((k,v)->{
map1.put(k.replaceAll("-",""),v);
});
map1.put("host",configuration.getUrl()+"/"+configuration.getBucketName());
returnmap1;
}catch(ErrorResponseExceptione){
e.printStackTrace();
}catch(InsufficientDataExceptione){
e.printStackTrace();
}catch(InternalExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(InvalidResponseExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(ServerExceptione){
e.printStackTrace();
}catch(XmlParserExceptione){
e.printStackTrace();
}
returnnull;
}

/**
*@description:獲取上傳文件的url
*@dateTime:2021/5/1314:15
*/
publicStringgetPolicyUrl(StringobjectName,Methodmethod,inttime,TimeUnittimeUnit){
try{
returnminioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(method)
.bucket(configuration.getBucketName())
.object(objectName)
.expiry(time,timeUnit).build());
}catch(ErrorResponseExceptione){
e.printStackTrace();
}catch(InsufficientDataExceptione){
e.printStackTrace();
}catch(InternalExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(InvalidResponseExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(XmlParserExceptione){
e.printStackTrace();
}catch(ServerExceptione){
e.printStackTrace();
}
returnnull;
}


/**
*@description:上傳文件
*@dateTime:2021/5/1314:17
*/
publicvoidupload(MultipartFilefile,StringfileName){
//使用putObject上傳一個(gè)文件到存儲桶中。
try{
InputStreaminputStream=file.getInputStream();
minioClient.putObject(PutObjectArgs.builder()
.bucket(configuration.getBucketName())
.object(fileName)
.stream(inputStream,file.getSize(),-1)
.contentType(file.getContentType())
.build());
}catch(ErrorResponseExceptione){
e.printStackTrace();
}catch(InsufficientDataExceptione){
e.printStackTrace();
}catch(InternalExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(InvalidResponseExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(ServerExceptione){
e.printStackTrace();
}catch(XmlParserExceptione){
e.printStackTrace();
}
}
/**
*@description:根據(jù)filename獲取文件訪問地址
*@dateTime:2021/5/1711:28
*/
publicStringgetUrl(StringobjectName,inttime,TimeUnittimeUnit){
Stringurl=null;
try{
url=minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(configuration.getBucketName())
.object(objectName)
.expiry(time,timeUnit).build());
}catch(ErrorResponseExceptione){
e.printStackTrace();
}catch(InsufficientDataExceptione){
e.printStackTrace();
}catch(InternalExceptione){
e.printStackTrace();
}catch(InvalidKeyExceptione){
e.printStackTrace();
}catch(InvalidResponseExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(XmlParserExceptione){
e.printStackTrace();
}catch(ServerExceptione){
e.printStackTrace();
}
returnurl;
}
}

簡單說明:

  • 使用MultipartFile接收前端文件流,再上傳到minio。
  • 構(gòu)建一個(gè)formData的簽名數(shù)據(jù),給前端,讓前端之前上傳到minio。
  • 構(gòu)建一個(gè)可以上傳的臨時(shí)URL給前端,前端通過攜帶文件請求該URL進(jìn)行上傳。
  • 使用filename請求服務(wù)端獲取臨時(shí)訪問文件的URL。(最長時(shí)間為7 天,想要永久性訪問,需要其他設(shè)置,這里不做說明。)

下面展示頁面html,使用的是VUE+element-ui進(jìn)行渲染。

html>
<html>
<head>
<metacharset="UTF-8">

<linkrel="stylesheet"href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<title>上傳圖片title>
head>
<body>
<divid="app">

<el-row:gutter="2">
<el-col:span="8">
<divclass="div-center-class">
<divclass="">
<center><h3>傳統(tǒng)上傳h3>center>
<el-upload
class="upload-demo"
action="#"
drag
:http-request="uploadHandle">
<iclass="el-icon-upload">i>
<divclass="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳em>div>
<divclass="el-upload__tip"slot="tip">只能上傳jpg/png文件,且不超過500kbdiv>
el-upload>
<divv-if="imgUrl">
<img:src="imgUrl"style="width:40px;height:40px">img>
div>
div>
div>
el-col>
<el-col:span="8">
<divclass="div-center-class">
<divclass="">
<center><h3>前端formData直傳h3>center>
<el-upload
class="upload-demo"
action="#"
drag
:http-request="httpRequestHandle">
<iclass="el-icon-upload">i>
<divclass="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳em>div>
<divclass="el-upload__tip"slot="tip">只能上傳jpg/png文件,且不超過500kbdiv>
el-upload>
<divv-if="directUrl">
<img:src="directUrl"style="width:40px;height:40px">img>
div>
div>
div>
el-col>
<el-col:span="8">
<divclass="div-center-class">
<divclass="">
<center><h3>前端Url直傳h3>center>
<el-upload
class="upload-demo"
action="#"
drag
:http-request="UrlUploadHandle">
<iclass="el-icon-upload">i>
<divclass="el-upload__text">將文件拖到此處,或<em>點(diǎn)擊上傳em>div>
<divclass="el-upload__tip"slot="tip">只能上傳jpg/png文件,且不超過500kbdiv>
el-upload>
<divv-if="uploadUrl">
<img:src="uploadUrl"style="width:40px;height:40px">img>
div>
div>
div>
el-col>
el-row>
div>
body>

<scriptsrc="https://unpkg.com/vue/dist/vue.js">script>

<scriptsrc="https://unpkg.com/element-ui/lib/index.js">script>

<scriptsrc="https://unpkg.com/axios/dist/axios.min.js">script>
<script>
newVue({
el:'#app',
data:function(){
return{
imgUrl:'',
directUrl:'',
uploadUrl:''
}
},
methods:{

uploadHandle(options){
let{file}=options;
this.traditionPost(file);
},
traditionPost(file){
_that=this
constform=newFormData();
form.append("fileName",file.name);
form.append("file",file);
this.axiosPost("post","/upload",form).then(function(res){
if(res.status===200){
_that.imgUrl=res.data.data
}else{
alert("上傳失敗!")
}
})
},
getpolicy(file){
_that=this
axios.get('policy?fileName='+file.name)
.then(function(response){
let{xamzalgorithm,xamzcredential,policy,xamzsignature,xamzdate,host}=response.data.data;
letformData=newFormData();
formData.append("key",file.name);
formData.append("x-amz-algorithm",xamzalgorithm);//讓服務(wù)端返回200,不設(shè)置則默認(rèn)返回204。
formData.append("x-amz-credential",xamzcredential);
formData.append("policy",policy);
formData.append("x-amz-signature",xamzsignature);
formData.append("x-amz-date",xamzdate);
formData.append("file",file);
//發(fā)送POST請求
_that.axiosPost("post",host,formData).then(function(res){
if(res.status===204){
axios.get('url?fileName='+file.name).then(function(res){
_that.directUrl=res.data.data;
})
}else{
alert("上傳失?。?)
}
})
})
},
httpRequestHandle(options){
let{file}=options;
this.getpolicy(file);
},

UrlUploadHandle(options){
let{file}=options;
this.getUploadUrl(file);
},
getUploadUrl(file){
_that=this
console.log(file)
axios.get('uploadUrl?fileName='+file.name)
.then(function(response){
leturl=response.data.data;
//發(fā)送put請求
letconfig={'Content-Type':file.type}
_that.axiosPost("put",url,file,config).then(function(res){
if(res.status===200){
axios.get('url?fileName='+file.name).then(function(res){
_that.uploadUrl=res.data.data;
})
}else{
alert("上傳失??!")
}
})
})
},
//封裝
//axios封裝post請求
axiosPost(method,url,data,config){
letresult=axios({
method:method,
url:url,
data:data,
headers:config
}).then(resp=>{
returnresp
}).catch(error=>{
return"exception="+error;
});
returnresult;
}

}
})
script>
<style>
.div-center-class{
padding:28%0%;
text-align:center;
background:beige;
}
style>
html>

a6a6bd8c-3ae9-11ed-9e49-dac502259ad0.png頁面效果

可以分別體驗(yàn)不同的實(shí)現(xiàn)效果。

以上就是使用springboot搭建基于minio的高性能存儲服務(wù)的全部步驟了。

項(xiàng)目地址是:

https://gitee.com/jack_whh/minio-upload



審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 云存儲
    +關(guān)注

    關(guān)注

    7

    文章

    781

    瀏覽量

    47385
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    67

    文章

    8567

    瀏覽量

    137255
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    537

    瀏覽量

    14414

原文標(biāo)題:Spring Boot + minio 實(shí)現(xiàn)高性能存儲服務(wù),So Easy~!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    瑞芯微(EASY EAI)RV1126B 模型轉(zhuǎn)換環(huán)境搭建

    1.概述模型轉(zhuǎn)換環(huán)境搭建流程如下所示:下載模型工具2.下載模型轉(zhuǎn)換工具為了保證模型轉(zhuǎn)換工具順利運(yùn)行,請下載網(wǎng)盤里“06.AI算法開發(fā)/01.rknn-toolkit2模型轉(zhuǎn)換
    的頭像 發(fā)表于 04-29 17:37 ?1079次閱讀
    瑞芯微(EASY EAI)RV1126B 模型轉(zhuǎn)換環(huán)境<b class='flag-5'>搭建</b>

    Docker容器網(wǎng)絡(luò)模式全解析

    容器網(wǎng)絡(luò)是Docker使用中最容易出問題的部分。容器之間怎么通信、容器怎么訪問外網(wǎng)、外部怎么訪問容器內(nèi)的服務(wù)——這三個(gè)問題搞不清楚,排查網(wǎng)絡(luò)故障就是抓瞎。
    的頭像 發(fā)表于 02-26 16:39 ?494次閱讀

    如何在2026年Rocky Linux(8、9和10)上安裝Docker

    Docker 已成為現(xiàn)代應(yīng)用部署、開發(fā)和基礎(chǔ)設(shè)施自動化的核心技術(shù)。如果你在服務(wù)器或VPS上運(yùn)行Rocky Linux,學(xué)會在Rocky Linux上安裝Docker是你2026年能掌握的最寶貴技能
    的頭像 發(fā)表于 01-12 17:21 ?1947次閱讀

    如何在NVIDIA Jetson AGX Thor上通過Docker高效部署vLLM推理服務(wù)

    繼系統(tǒng)安裝與環(huán)境配置后,本期我們將繼續(xù)帶大家深入 NVIDIA Jetson AGX Thor 的開發(fā)教程之旅,了解如何在 Jetson AGX Thor 上,通過 Docker 高效部署 vLLM 推理服務(wù)。
    的頭像 發(fā)表于 11-13 14:08 ?4462次閱讀
    如何在NVIDIA Jetson AGX Thor上通過<b class='flag-5'>Docker</b>高效部署vLLM推理<b class='flag-5'>服務(wù)</b>

    創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—Docker容器部署方法說明

    本文圍繞創(chuàng)龍科技研發(fā)的評估板,詳細(xì)說明 Docker 容器部署方法,包括 Docker 架構(gòu)介紹、安裝步驟(依賴包安裝、GPG 密鑰添加等)、本地鏡像倉庫搭建,以及單個(gè) / 多個(gè)鏡像的構(gòu)建、推送
    的頭像 發(fā)表于 10-22 17:21 ?888次閱讀
    創(chuàng)龍 瑞芯微 RK3588 國產(chǎn)2.4GHz八核 工業(yè)開發(fā)板—<b class='flag-5'>Docker</b>容器部署方法說明

    香港服務(wù)器支持Docker和Kubernetes嗎?

    在云原生技術(shù)成為主流的今天,Docker和Kubernetes(K8s)已成為現(xiàn)代化應(yīng)用開發(fā)和部署的事實(shí)標(biāo)準(zhǔn)。對于選擇香港服務(wù)器的開發(fā)者與企業(yè)而言,一個(gè)核心問題是:香港服務(wù)器能否完美支持Doc
    的頭像 發(fā)表于 10-21 15:47 ?949次閱讀

    【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】Docker 環(huán)境安裝及應(yīng)用

    一、檢查 Docker 安裝狀態(tài) 板子提示“command not found”或無版本信息,說明 Docker 未安裝,如有需要請自行安裝 二、Docker 環(huán)境安裝 首先更新系統(tǒng)包索引并安裝
    發(fā)表于 09-01 17:59

    Docker容器安全攻防實(shí)戰(zhàn)案例

    在云原生時(shí)代,Docker已成為現(xiàn)代應(yīng)用部署的基石。然而,容器化帶來便利的同時(shí),也引入了新的安全挑戰(zhàn)。作為一名在生產(chǎn)環(huán)境中管理過數(shù)千個(gè)容器的運(yùn)維工程師,我將通過真實(shí)的攻防實(shí)戰(zhàn)案例,帶你深入了解Docker安全的每一個(gè)細(xì)節(jié)。
    的頭像 發(fā)表于 08-05 09:52 ?1590次閱讀

    【VisionFive 2單板計(jì)算機(jī)試用體驗(yàn)】1. 環(huán)境搭建與代碼整編

    一、環(huán)境搭建 相關(guān)命令來源:GitHub - starfive-tech/VisionFive2 注意:整個(gè)環(huán)境搭建過程都需要vpn,否則ubuntu鏡像無法下載,代碼無法抓取,編譯中間的工具無法
    發(fā)表于 07-08 23:07

    恒訊科技分析:云儲存服務(wù)搭建教程

    搭建云存儲服務(wù)器是一個(gè)相對復(fù)雜但極具實(shí)用性的項(xiàng)目,以下是一個(gè)簡化的搭建教程,幫助你快速入門。 一、明確需求 在搭建云存儲服務(wù)器之前,首先需要
    的頭像 發(fā)表于 07-07 11:07 ?1493次閱讀

    干貨分享 | RK3588 Ubuntu系統(tǒng)Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平臺上運(yùn)行Ubuntu系統(tǒng)時(shí),Docker容器技術(shù)能極大提升開發(fā)部署效率。通過輕量級虛擬化實(shí)現(xiàn)環(huán)境隔離與快速遷移,本文將從零開始詳解RK3588平臺
    的頭像 發(fā)表于 06-27 12:01 ?4266次閱讀
    干貨分享 | RK3588 Ubuntu系統(tǒng)<b class='flag-5'>Docker</b>容器使用指南

    docker無法啟用怎么解決?

    mengxing@mengxing-virtual-machine:/etc/docker$ sudo systemctl daemon-reload
    發(fā)表于 06-23 07:17

    迅為RK3576開發(fā)板NPUrknn-toolkit2環(huán)境搭建和使用docker環(huán)境安裝

    迅為RK3576開發(fā)板NPUrknn-toolkit2環(huán)境搭建和使用docker環(huán)境安裝
    的頭像 發(fā)表于 06-18 15:22 ?1508次閱讀
    迅為RK3576開發(fā)板NPUrknn-toolkit2環(huán)境<b class='flag-5'>搭建</b>和使用<b class='flag-5'>docker</b>環(huán)境安裝

    Docker Volume管理命令大全

    Docker Volume管理命令大全
    的頭像 發(fā)表于 05-28 17:14 ?1114次閱讀

    如何使用Docker部署大模型

    隨著深度學(xué)習(xí)和大模型的快速發(fā)展,如何高效地部署這些模型成為了一個(gè)重要的挑戰(zhàn)。Docker 作為一種輕量級的容器化技術(shù),能夠?qū)⒛P图捌湟蕾嚟h(huán)境打包成一個(gè)可移植的容器,極大地簡化了部署流程。本文將詳細(xì)介紹如何使用 Docker 部署大模型,并給出具體的步驟和示例。
    的頭像 發(fā)表于 05-24 16:39 ?1372次閱讀
    延川县| 大城县| 凭祥市| 利辛县| 南宫市| 永安市| 昭觉县| 扶风县| 文水县| 华亭县| 汝城县| 留坝县| 怀集县| 荃湾区| 伊金霍洛旗| 上高县| 墨竹工卡县| 肥东县| 双流县| 陇西县| 永嘉县| 西林县| 阜宁县| 山丹县| 布尔津县| 聂荣县| 涡阳县| 张家口市| 永嘉县| 巫溪县| 灵武市| 太谷县| 安岳县| 城市| 寻甸| 香港| 西畴县| 平阴县| 双流县| 扶风县| 独山县|