javascript
Springboot整合minio
第一步:查找 minio 最新依賴,通過 maven 查詢網站查詢, 這搜索框輸入 minio, 也可以查看 MinIO 官網 https://docs.min.io/docs/java-client-quickstart-guide.html如下:
點擊 minio 進入查看 maven 依賴,可以看到最新版為 8.3.4
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.4</version> </dependency>第二步:(整合到項目中)
1. 將依賴添加到新建的 springboot 項目中, 在 pom.xml 添加 2. 配置 minio 客戶端, 不會的話參考 minio java sdk 文檔, 但是這個文檔給的是 3.0.10 版本的 sdk,與新版的不兼容,最新版的還是看 github 地址
| Endpoint | 對象存儲服務的 URL |
| Access Key | Access key 就像用戶 ID,可以唯一標識你的賬戶 |
| Secret Key | Secret key 是你賬戶的密碼 |
默認安裝不指定 Access key 和 Secret key 的話都是 minioadmin, Endpoint 則為服務器地址:如我安裝的的端口為 1024,那 Endpoint 就是: http://localhost:1024] 為了方便我們通過 bean 的方式注入客戶端如下:
yml
spring:#?配置文件上傳大小限制servlet:multipart:max-file-size:?100MBmax-request-size:?100MB#?minio?參數配置 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, 現在客戶端已注入 spring 容器中,在使用的時候,只需要獲取就可以了。
第三步: 文件上傳 1. 新增一個 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 中新增好的,如果沒有的話,可以自己手動添加,也可以通過代碼添加, 具體參考 sdk 的說明, 這里就不多說了。
2. 通過 postman 測試文件上傳(沒有 postman 的可以看我之前的博客,有相關介紹)
點擊執行后返回 ok, 執成功, 此時通過 minio web 端看看文件是否上傳成功
看到剛上傳的文件就說明成功了。3. 其他說明, 如何通過瀏覽器訪問剛上傳的圖片呢,就是通過 endpoint 服務地址加 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");//?設置強制下載不打開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, 文件下載下來能夠正常顯示,則說明成功。
總結: 通過以上操作,我們已經完成 springboot 與 minio 的整合,可以通過 minio sdk 實現文件上傳與下載功能。當然還有其他 api 操作,我就不多介紹了,都是一個思路,調用傳值就可以了,自己嘗試一下,就能 get 到了。
作者:Archie_java
來源鏈接:
https://blog.csdn.net/qq_43842093/article/details/121873566
總結
以上是生活随笔為你收集整理的Springboot整合minio的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话转岗 PHP 开发小结
- 下一篇: 自强不息系列之Python 线性查找