springboot 使用 minio
生活随笔
收集整理的這篇文章主要介紹了
springboot 使用 minio
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
springboot 使用 minio
yml 配置
yml 配置 # ====================== ↓↓↓↓↓↓ MinIO文件服務器 ↓↓↓↓↓↓ ====================== minio:url: http://114.67.110.190:9001accessKey: minioadminsecretKey: minioadminbucketName: zpfmaven:
<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.3.4</version></dependency>屬性文件:
package com.example.minio;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration;@Data @Configuration @ConfigurationProperties(prefix = "minio") public class MinIoProperties {/*** minio地址+端口號*/private String url;/*** minio用戶名*/private String accessKey;/*** minio密碼*/private String secretKey;/*** 文件桶的名稱*/private String bucketName;}工具類:
package com.example.minio;import io.minio.MinioClient; import io.minio.ObjectStat; import io.minio.PutObjectOptions; import io.minio.messages.Bucket; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.http.fileupload.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile;import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.net.URLEncoder; import java.util.List;@Slf4j @Component public class MinIoUtil {@AutowiredMinIoProperties minIoProperties;private static MinioClient minioClient;/*** 初始化minio配置** @param :* @return: void* @date : 2020/8/16 20:56*/@PostConstructpublic void init() {try {minioClient = new MinioClient(minIoProperties.getUrl(), minIoProperties.getAccessKey(),minIoProperties.getSecretKey());createBucket(minIoProperties.getBucketName());} catch (Exception e) {e.printStackTrace();log.error("初始化minio配置異常: 【{}】", e.fillInStackTrace());}}/*** 判斷 bucket是否存在** @param bucketName:* 桶名* @return: boolean* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static boolean bucketExists(String bucketName) {return minioClient.bucketExists(bucketName);}/*** 創建 bucket** @param bucketName:* 桶名* @return: void* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static void createBucket(String bucketName) {boolean isExist = minioClient.bucketExists(bucketName);if (!isExist) {minioClient.makeBucket(bucketName);}}/*** 獲取全部bucket** @param :* @return: java.util.List<io.minio.messages.Bucket>* @date : 2020/8/16 23:28*/@SneakyThrows(Exception.class)public static List<Bucket> getAllBuckets() {return minioClient.listBuckets();}/*** 文件上傳** @param bucketName:* 桶名* @param fileName:* 文件名* @param filePath:* 文件路徑* @return: void* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static void upload(String bucketName, String fileName, String filePath) {minioClient.putObject(bucketName, fileName, filePath, null);}/*** 文件上傳** @param bucketName:* 桶名* @param fileName:* 文件名* @param stream:* 文件流* @return: java.lang.String : 文件url地址* @date : 2020/8/16 23:40*/@SneakyThrows(Exception.class)public static String upload(String bucketName, String fileName, InputStream stream) {minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));return getFileUrl(bucketName, fileName);}/*** 文件上傳** @param bucketName:* 桶名* @param file:* 文件* @return: java.lang.String : 文件url地址* @date : 2020/8/16 23:40*/@SneakyThrows(Exception.class)public static String upload(String bucketName, MultipartFile file) {final InputStream is = file.getInputStream();final String fileName = file.getOriginalFilename();minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));is.close();return getFileUrl(bucketName, fileName);}/*** 刪除文件** @param bucketName:* 桶名* @param fileName:* 文件名* @return: void* @date : 2020/8/16 20:53*/@SneakyThrows(Exception.class)public static void deleteFile(String bucketName, String fileName) {minioClient.removeObject(bucketName, fileName);}/*** 下載文件** @param bucketName:* 桶名* @param fileName:* 文件名* @param response:* @return: void* @date : 2020/8/17 0:34*/@SneakyThrows(Exception.class)public static void download(String bucketName, String fileName, HttpServletResponse response) {// 獲取對象的元數據final ObjectStat stat = minioClient.statObject(bucketName, fileName);response.setContentType(stat.contentType());response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));InputStream is = minioClient.getObject(bucketName, fileName);IOUtils.copy(is, response.getOutputStream());is.close();}/*** 獲取minio文件的下載地址** @param bucketName:* 桶名* @param fileName:* 文件名* @return: java.lang.String* @date : 2020/8/16 22:07*/@SneakyThrows(Exception.class)public static String getFileUrl(String bucketName, String fileName) {return minioClient.presignedGetObject(bucketName, fileName);}}minio分布式存儲真香,還不趕快了解下?
在開發中經常會用到的就是文件存儲了,以前經常都是在服務器目錄上映射一個目錄用來存儲文件,這個當然也沒有問題,如果存儲量不大的話。當然還有的會選擇使用第三方存儲比如七牛云、阿里云的oss云儲存方案,自己搭建常用的可能會使用fastdfs或其他的,我接觸minio后發現這個還是很不錯,使用簡單,支持多種語言SDK開發起來特別方便,多的就不說了,趕快上車了解下。
文檔地址:minio相關文檔
docker快速安裝單機版:(默認你已經安裝了docker環境,不清楚先了解docker安裝使用再來吧!)
GNU/Linux 和 macOS
docker run -p 9000:9000 --name minio1 \-v /mnt/data:/data \-v /mnt/config:/root/.minio \minio/minio server /data指定密鑰: docker run -p 9000:9000 --name minio1 \-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \-v /mnt/data:/data \-v /mnt/config:/root/.minio \minio/minio server /dataWindows
docker run -p 9000:9000 --name minio1 \-v D:\data:/data \-v D:\minio\config:/root/.minio \minio/minio server /data指定密鑰: docker run -p 9000:9000 --name minio1 \-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \-v D:\data:/data \-v D:\minio\config:/root/.minio \minio/minio server /data特別提醒:(-v 映射路徑一定要是絕對路徑,不然啟動會報錯)
啟動成功后訪問瀏覽器:http://localhost:{port} 進行訪問,不指定key和secret默認都是minioadmin,訪問后進入登陸頁面,輸入key和secret即可登陸,登陸成功頁面如下:
接下來點擊紅色按鈕創建一個存儲桶,即可上傳文件,比如創建一個test
ok至此已經搭建完成了,就是這么簡單就搭建好了一個簡單的云存儲系統了。
總結: 通過簡單操作,搭建了好了,minio默認提供了管理頁面,使用起來方便不要開發都可以直接使用,所以還是覺得很不錯的。
總結
以上是生活随笔為你收集整理的springboot 使用 minio的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Collections.emp
- 下一篇: 操作系统设计与实现第3版笔记与minix