javascript
Springboot整合minio
第一步:查找 minio 最新依賴,通過 maven 查詢網(wǎng)站查詢, 這搜索框輸入 minio, 也可以查看 MinIO 官網(wǎng) https://docs.min.io/docs/java-client-quickstart-guide.html如下:
點(diǎn)擊 minio 進(jìn)入查看 maven 依賴,可以看到最新版為 8.3.4
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.4</version> </dependency>第二步:(整合到項(xiàng)目中)
1. 將依賴添加到新建的 springboot 項(xiàng)目中, 在 pom.xml 添加 2. 配置 minio 客戶端, 不會(huì)的話參考 minio java sdk 文檔, 但是這個(gè)文檔給的是 3.0.10 版本的 sdk,與新版的不兼容,最新版的還是看 github 地址
| Endpoint | 對(duì)象存儲(chǔ)服務(wù)的 URL |
| Access Key | Access key 就像用戶 ID,可以唯一標(biāo)識(shí)你的賬戶 |
| Secret Key | Secret key 是你賬戶的密碼 |
默認(rèn)安裝不指定 Access key 和 Secret key 的話都是 minioadmin, Endpoint 則為服務(wù)器地址:如我安裝的的端口為 1024,那 Endpoint 就是: http://localhost:1024] 為了方便我們通過 bean 的方式注入客戶端如下:
yml
spring:#?配置文件上傳大小限制servlet:multipart:max-file-size:?100MBmax-request-size:?100MB#?minio?參數(shù)配置 minio:endpoint:?http://localhost:1024accessKey:?minioadminsecretKey:?minioadmin@Configuration public?class?MinIoClientConfig?{@Value("${minio.endpoint}")private?String?endpoint;@Value("${minio.accessKey}")private?String?accessKey;@Value("${minio.secretKey}")private?String?secretKey;/***?注入minio?客戶端*?@return*/@Beanpublic?MinioClient?minioClient(){return?MinioClient.builder().endpoint(endpoint).credentials(accessKey,?secretKey).build();} }ok, 現(xiàn)在客戶端已注入 spring 容器中,在使用的時(shí)候,只需要獲取就可以了。
第三步: 文件上傳 1. 新增一個(gè) UploadController 控制器用于處理文件上傳,如下:
@RestController public?class?UploadController?{@Resourceprivate?MinioClient?minioClient;/***?文件上傳*?@param?file*?@return*/@PostMapping("/upload")public?String?upload(MultipartFile?file){try?{PutObjectArgs?objectArgs?=?PutObjectArgs.builder().object(file.getOriginalFilename()).bucket("test").contentType(file.getContentType()).stream(file.getInputStream(),file.getSize(),-1).build();minioClient.putObject(objectArgs);return?"ok";}?catch?(Exception?e)?{e.printStackTrace();return?e.getMessage();}} }注意這里的 bucket 是我提前在 minio 中新增好的,如果沒有的話,可以自己手動(dòng)添加,也可以通過代碼添加, 具體參考 sdk 的說明, 這里就不多說了。
2. 通過 postman 測(cè)試文件上傳(沒有 postman 的可以看我之前的博客,有相關(guān)介紹)
點(diǎn)擊執(zhí)行后返回 ok, 執(zhí)成功, 此時(shí)通過 minio web 端看看文件是否上傳成功
看到剛上傳的文件就說明成功了。3. 其他說明, 如何通過瀏覽器訪問剛上傳的圖片呢,就是通過 endpoint 服務(wù)地址加 bucket 名稱加圖片的名稱,在本例子訪問路徑則為:5b01ca40273bcf53f4e6d84c0c595642.gif
第四步: 文件下載
在 UploadController 控制其中新增 download 方法, 如下:
/***?下載文件*?@param?filename*/@GetMapping("/download/{filename}")public?void?download(@PathVariable?String?filename,?HttpServletResponse?res){GetObjectArgs?objectArgs?=?GetObjectArgs.builder().bucket("test").object(filename).build();try?(GetObjectResponse?response?=?minioClient.getObject(objectArgs)){byte[]?buf?=?new?byte[1024];int?len;try?(FastByteArrayOutputStream?os?=?new?FastByteArrayOutputStream()){while?((len=response.read(buf))!=-1){os.write(buf,0,len);}os.flush();byte[]?bytes?=?os.toByteArray();res.setCharacterEncoding("utf-8");res.setContentType("application/force-download");//?設(shè)置強(qiáng)制下載不打開res.addHeader("Content-Disposition",?"attachment;fileName="?+?filename);try?(?ServletOutputStream?stream?=?res.getOutputStream()){stream.write(bytes);stream.flush();}}}?catch?(Exception?e)?{e.printStackTrace();}}通過訪問下載地址:http://localhost:8421/download/5b01ca40273bcf53f4e6d84c0c595642.gif, 文件下載下來能夠正常顯示,則說明成功。
總結(jié): 通過以上操作,我們已經(jīng)完成 springboot 與 minio 的整合,可以通過 minio sdk 實(shí)現(xiàn)文件上傳與下載功能。當(dāng)然還有其他 api 操作,我就不多介紹了,都是一個(gè)思路,調(diào)用傳值就可以了,自己嘗試一下,就能 get 到了。
作者:Archie_java
來源鏈接:
https://blog.csdn.net/qq_43842093/article/details/121873566
總結(jié)
以上是生活随笔為你收集整理的Springboot整合minio的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话转岗 PHP 开发小结
- 下一篇: java中undefined如何解决_处