springboot 使用 minio
springboot 使用 minio
yml 配置
yml 配置 # ====================== ↓↓↓↓↓↓ MinIO文件服務(wù)器 ↓↓↓↓↓↓ ====================== 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地址+端口號(hào)*/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);}/*** 創(chuàng)建 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) {// 獲取對(duì)象的元數(shù)據(jù)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分布式存儲(chǔ)真香,還不趕快了解下?
在開發(fā)中經(jīng)常會(huì)用到的就是文件存儲(chǔ)了,以前經(jīng)常都是在服務(wù)器目錄上映射一個(gè)目錄用來存儲(chǔ)文件,這個(gè)當(dāng)然也沒有問題,如果存儲(chǔ)量不大的話。當(dāng)然還有的會(huì)選擇使用第三方存儲(chǔ)比如七牛云、阿里云的oss云儲(chǔ)存方案,自己搭建常用的可能會(huì)使用fastdfs或其他的,我接觸minio后發(fā)現(xiàn)這個(gè)還是很不錯(cuò),使用簡(jiǎn)單,支持多種語言SDK開發(fā)起來特別方便,多的就不說了,趕快上車了解下。
文檔地址:minio相關(guān)文檔
docker快速安裝單機(jī)版:(默認(rèn)你已經(jīng)安裝了docker環(huán)境,不清楚先了解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 映射路徑一定要是絕對(duì)路徑,不然啟動(dòng)會(huì)報(bào)錯(cuò))
啟動(dòng)成功后訪問瀏覽器:http://localhost:{port} 進(jìn)行訪問,不指定key和secret默認(rèn)都是minioadmin,訪問后進(jìn)入登陸頁面,輸入key和secret即可登陸,登陸成功頁面如下:
接下來點(diǎn)擊紅色按鈕創(chuàng)建一個(gè)存儲(chǔ)桶,即可上傳文件,比如創(chuàng)建一個(gè)test
ok至此已經(jīng)搭建完成了,就是這么簡(jiǎn)單就搭建好了一個(gè)簡(jiǎn)單的云存儲(chǔ)系統(tǒng)了。
總結(jié): 通過簡(jiǎn)單操作,搭建了好了,minio默認(rèn)提供了管理頁面,使用起來方便不要開發(fā)都可以直接使用,所以還是覺得很不錯(cuò)的。
總結(jié)
以上是生活随笔為你收集整理的springboot 使用 minio的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java Collections.emp
- 下一篇: 汇编解析(1)-内存寻址之实模型平面模式