非結構化數據庫-MinIO基本集成

是什么

MinIO 是一個高性能的分布式對象存儲服務,適合存儲非結構化數據,如圖片,音頻,視頻,日志等。對象文件最大可以達到5TB。

安裝啟動

mkdir -p  /usr/local/minio
cd /usr/local/minio# 下載安裝包
wget https://dl.min.io/server/minio/release/linux-amd64/minio

下載完畢后:

在當前minio目錄下,會出現一個minio文件

# 給予權限
chmod +x minio# 創建minio文件存儲目錄及日志目錄
mkdir -p /usr/local/minio/data
mkdir -p /usr/local/minio/logs

然后在 /usr/local/minio/目錄下,新建一個run.sh并編輯以下內容

vim run.sh,然后將以下內容保存到run.sh,并為其賦予執行權限chmod u+x run.sh

run.sh內容如下:

#!/bin/bash
export MINIO_ACCESS_KEY=minio
export MINIO_SECRET_KEY=minio123456
# nohup啟動服務 指定文件存放路徑 /root/data 還有設置日志文件路徑 /root/minio/log
nohup ./minio server --address :9000 --console-address :9001 /usr/local/minio/data > /usr/local/minio/logs/minio.log 2>&1 &

啟動minIO

# 啟動minio服務
./run.sh
# 查看日志
tail -f /usr/local/minio/logs/minio.log 

平臺使用

地址:http://127.0.0.1:9000(注意開放對應端口9000、9001)【當端口 9000 用于連接到 API 時,MinIO 會自動將瀏覽器訪問重定向到 MinIO 控制臺9001。】

輸入賬號密碼后,

創建bucket,名字隨意,創建完成后服務器/usr/local/minio/data下也會創建這個文件目錄

image-20230817143405545

http://www.dedeyun.com/it/java/102599.html

SpringBoot集成MinIO

1.添加依賴

            <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.4.1</version></dependency>

2.配置文件

spring:minio:endpoint: http://124.222.253.33:9000access-key: miniosecret-key: minio123456bucket-name: fileservlet:multipart: # 上傳文件最大大小max-file-size: 1024MBmax-request-size: 1024MB

3.配置類創建客戶端

@Data
@Component
@ConfigurationProperties(prefix = "spring.minio")
public class MinioConfig {private String endpoint;private String accessKey;private String secretKey;@Beanpublic MinioClient minioClient() {return MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey).build();}
}

4.核心業務類

僅有一些基礎操作

@Slf4j
@Service
public class FileService {@Autowiredprivate MinioClient minioClient;private static final String SEPARATOR = "/";@Value("${spring.minio.bucket-name}")private String bucketName;/*** 上傳文件** @param file 文件對象* @param id   設備ID*/public void uploadFile(MultipartFile file, Long id) {try {// 創建bucketif (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}// 同名文件會進行覆蓋String objectName = file.getOriginalFilename();@CleanupInputStream inputStream = file.getInputStream();minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(id + SEPARATOR + objectName) // 多文件夾.stream(inputStream, file.getSize(), -1).contentType(file.getContentType()).build());} catch (Exception e) {log.error("文件上傳失敗!{}", e.getMessage());throw new RuntimeException("文件上傳失敗,請重新上傳");}}/*** 刪除文件** @param path 文件路徑*/public void removeObject(String path) {try {minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(path).build());} catch (Exception e) {log.error("文件刪除失敗!{}", e.getMessage());throw new RuntimeException("文件刪除失敗,請重新刪除");}}/*** 文件列表** @param id 設備ID*/public List<FileInfo> listFiles(Long id) {Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).recursive(true).build());List<FileInfo> infos = new ArrayList<>();results.forEach(r -> {FileInfo info = new FileInfo();try {Item item = r.get();// 最多一層文件夾String path = item.objectName();int idx = path.indexOf(SEPARATOR);if (path.substring(0, idx).equals(id.toString())) {info.setPath(path);info.setFileName(path.substring(idx + 1));info.setSize(item.size());infos.add(info);}} catch (Exception e) {e.printStackTrace();}});return infos;}/*** 下載文件** @param response response* @param path     文件路徑*/public void downFile(HttpServletResponse response, String path) {try {@CleanupOutputStream outputStream = response.getOutputStream();@CleanupInputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(this.bucketName).object(path).build());response.reset();String fileName = path.substring(path.indexOf(SEPARATOR) + 1);response.setHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(fileName.substring(fileName.lastIndexOf(SEPARATOR) + 1), "UTF-8"));response.setContentType("application/octet-stream");response.setCharacterEncoding("UTF-8");FileCopyUtils.copy(inputStream, outputStream);} catch (Throwable e) {log.error("文件下載失敗!{}", e.getMessage());throw new RuntimeException("文件下載失敗,請重新下載");}}
}

controller

@RestController
public class FileController {@Autowiredprivate FileService fileService;@PostMapping("/upload")public String uploadFile(@RequestParam("file") MultipartFile file, Long id) {fileService.uploadFile(file, id);return "上傳成功";}@GetMapping("/download")public String downloadFile(HttpServletResponse response, String path) {fileService.downFile(response, path);return "下載成功";}@DeleteMapping("/delete")public String deleteFile(String path) {fileService.removeObject(path);return "刪除成功";}@GetMapping("/list")public List<FileInfo> listFiles(Long id) {return fileService.listFiles(id);}
}

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

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

相關文章

pandas.errors.ParserError: Error tokenizing data. C error: out of memory

目錄 用pandas讀入數據的時候發現數據讀入時出錯了&#xff0c;數據量感覺也不是很大 十萬多條數據。電腦內存是16個G。報錯信息為&#xff1a;“ pandas.errors.ParserError: Error tokenizing data. C error: out of memory” 想想不對啊 昨天都可以順利的讀入&#xff0c;現…

你真的掌握了 Python 的七種參數了嗎?

不知道為什么網上總有人說 Python 的參數類型有 4 種啊&#xff0c;5 種啊&#xff0c;殊不知其實有 7 種。Python 的 7 種參數分別是 默認參數、位置參數、關鍵字參數、可變長位置參數、可變長關鍵字參數、僅位置參數 和 僅關鍵字參數。小白可能沒見過“可變長參數”&#xff…

lvs-dr模式

一&#xff0c;數據包流向&#xff1a; 1&#xff0c;cilent向目標vip發出請求&#xff0c;dir接收&#xff0c;此時ip報頭數據幀頭信息。 2&#xff0c;dir根據負載均衡算法給rs&#xff08;rip&#xff09;&#xff0c;將rip所在網卡的mac地址作為目標的mac地址&#xff0c;發…

深入解析Spring基本概念和核心思想

文章目錄 基本概念IoCIoc容器IoC理解IoC的步驟Spring中使用ioc的步驟 AopAop的理解Aop的步驟 控制反轉誰控制誰? 控制什么?為何叫反轉(對應于正向)?哪些方面反轉了?為何需要反轉? 依賴什么是依賴(按名稱理解、按動詞理解)? 誰依賴于誰? 為什么需要依賴? 依賴什么東西?…

vscode如何漢化

首先我們到vscode官網下載 鏈接如下&#xff1a; Visual Studio Code - Code Editing. Redefined 根據自己需要的版本下載就好 下載并且安裝完畢之后 運行vscode 然后按快捷鍵 CTRLSHIFTX 打開安裝擴展界面 搜索簡體中文 安裝就可以了 謝謝大家觀看

npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)報錯問題解決

當在使用npm包管理器或執行npm命令時&#xff0c;有時候會遇到“npm ERR!Cannot read properties of null(reading ‘pickAlgorithm’)”這個錯誤提示&#xff0c;這是一個常見的npm錯誤。 這個錯誤提示通常說明在使用npm包管理器時&#xff0c;執行了某個npm命令&#xff0c;…

學習筆記整理-正則表達式-01-認識正則

一、基本認識 1. 什么是正則表達式 正則表達式(regular expression)描述了字符串"構成模式"&#xff0c;經常被用于檢查字符串是否符合預定的格式要求。 用一個例子快速演示正則表達式基本使用方法&#xff1a;檢查某個字符串是否是6位數字 // 要檢查的字符串va…

第五課:聯合體或共用體 Union

功能描述&#xff1a;聯合體或共用體 Union 的介紹及使用方法 一、Union 簡介 共同體&#xff08;union&#xff09;也稱為聯合體&#xff0c;它能在同一個內存空間中存儲不同的數據類型&#xff08;不是同時存儲&#xff09;&#xff0c;其典型的用法是&#xff0c;設計一種表…

Vue3 —— watchEffect 高級偵聽器

該文章是在學習 小滿vue3 課程的隨堂記錄示例均采用 <script setup>&#xff0c;且包含 typescript 的基礎用法 前言 Vue3 中新增了一種特殊的監聽器 watchEffect&#xff0c;它的類型是&#xff1a; function watchEffect(effect: (onCleanup: OnCleanup) > void,o…

整理mongodb文檔:find方法查詢數據

個人博客 整理mongodb文檔:find方法查詢數據 求關注&#xff0c;求批評&#xff0c;求指出&#xff0c;如果哪兒不清晰&#xff0c;請指出來&#xff0c;謝謝 文章概敘 如題&#xff0c;本文講的是如何用find查詢數據&#xff0c;如何在數組、字段、對象中查詢&#xff0c;以…

自然語言處理技術:NLP句法解析樹與可視化方法

自然語言處理(Natural Language Processing,NLP)句法解析樹是一種表示自然語言句子結構的圖形化方式。它幫助將句子中的每個詞匯和短語按照語法規則連接起來,形成一個樹狀結構,以便更好地理解句子的語法結構和含義。句法解析樹對于理解句子的句法關系、依存關系以及語義角…

Python實現輕量級WEB服務器接收HTTP提交的RFID刷卡信息并回應驅動讀卡器顯示播報語音

本示例使用的設備&#xff1a;RFID網絡WIFI無線TCP/UDP/HTTP可編程二次開發讀卡器POE供電語音-淘寶網 (taobao.com) # -*- coding: utf-8 -*- import time import datetime import socket import threading#將中文信息轉換編碼&#xff0c;顯示文字、TTS語音都需要轉換-------…

從入門到精通Python隧道代理的使用與優化

哈嘍&#xff0c;Python爬蟲小伙伴們&#xff01;今天我們來聊聊如何從入門到精通地使用和優化Python隧道代理&#xff0c;讓我們的爬蟲程序更加穩定、高效&#xff01;今天我們將對使用和優化進行一個簡單的梳理&#xff0c;并且會提供相應的代碼示例。 1. 什么是隧道代理&…

SpringCloud Gateway:status: 503 error: Service Unavailable

使用SpringCloud Gateway路由請求時&#xff0c;出現如下錯誤 yml配置如下&#xff1a; 可能的一種原因是&#xff1a;yml配置了gateway.discovery.locator.enabledtrue&#xff0c;此時gateway會使用負載均衡模式路由請求&#xff0c;但是SpringCloud Alibaba刪除了Ribbon的…

無涯教程-Perl - setpwent函數

描述 此功能將枚舉設置(或重置)到密碼條目集的開頭。應該在第一次調用getpwent之前調用此函數。 語法 以下是此函數的簡單語法- setpwent返回值 此函數不返回任何值。 例 以下是顯示其基本用法的示例代碼- #!/usr/bin/perlwhile(($name, $passwd, $uid, $gid, $quota, …

C++寫文件,直接寫入結構體

C寫文件&#xff0c;直接寫入結構體 以前寫文件都是寫入字符串或者二進制再或者就是一些配置文件&#xff0c;今天介紹一下直接寫入結構體&#xff0c;可以在軟件參數較多的時候直接進行讀寫&#xff0c;直接將整個結構體寫入和讀取&#xff0c;看代碼&#xff1a; #include&…

tomcat中的BIO與NIO發展

tomcat中的NIO發展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;異步非阻塞式IO&#xff0c;NIO的升級版&#xff09;、APR&#xff08;Apache可移植運行庫&#xff09;模型&#xff0c;本文主要介紹NI…

iceberg系列之 hadoop catalog 小文件合并實戰

背景 flink1.15 hadoop3.0pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…

UBuntu18.04 Qt之雙HDMI屏切換

UBuntu18.04 Qt之雙HDMI接2個4K屏并分別設置分辨率、主屏、副屏 一、設置HDMI-2為主屏 在main函數里面添加&#xff1a; #include "mainwindow.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);{long nTotal 0;c…

spring cloud gateway中配置uri

gateway中配置uri配置有三種方式: websocket方式&#xff1a;uri: ws://localhost:9000http方式: uri: http://localhost:8130/lb注冊中心配置方式&#xff08;注冊的服務名稱&#xff09;: uri: lb://monitor-ms gateway的lb方式識別的服務名稱命名規則&#xff1a; "[…