对象存储作为企业中数据存储必不可少的工具之一,目前市面上为了方便,大都使用阿里云OSS、腾讯COS等,作为个人使用,其实也可以简单搭建私有的独立ip的对象存储工具,部署在自己的服务器或者是本地的机器上,已经有相应的开源工具,比如下面介绍的MinIo。github地址:https://github.com/minio/minio
一、搭建MinIo
安装运行minio
docker
启用下面的命令后,文件将存储在容器中的/data目录下,建议持久存储容器中的文件数据,使用-v /opt/minio/data:/data将容器中的/data目录映射到本机上的/opt/minio/data,启动后打开127.0.0.1:9000,默认的账号密码为都为minioadmin。
1 2 3 4 5 6
| docker run -p 9000:9000 -p 9001:9001 \ quay.io/minio/minio server /data --console-address ":9001" # 建议自己做映射 #docker run -p 9000:9000 -p 9001:9001 \
|
Mac
使用brew下载安装minio,没有brew的先看下怎么安装brew
1 2 3 4
| # 使用brew安装minio brew install minio/stable/minio # 启动minio,替换/data为本地路径/Users/xxx/Downloads minio server /data
|
Linux
二进制方式进行安装,
1 2 3 4
| wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio 替换/data为本地路径 ./minio server /data
|
安装启动完成后
使用http://127.0.0.1:9000 打开

创建一个名称为test的桶

二、SpringBoot中使用
引入依赖
1 2 3 4 5
| <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.0.3</version> </dependency>
|
properties中定义相关配置
1 2 3 4 5 6 7 8 9
| minio.endpoint=127.0.0.1 minio.port=9000
minio.accessKey=minioadmin minio.secretKey=minioadmin minio.secure=false
minio.bucketName=test
|
定义Bean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import io.minio.MinioClient; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component;
@Data @Component @ConfigurationProperties(prefix = "minio") public class MinioConfig {
private String endpoint;
private int port;
private String accessKey;
private String secretKey;
private Boolean secure;
@Bean public MinioClient getMinioClient() { return MinioClient.builder().endpoint(endpoint, port, secure).credentials(accessKey, secretKey).build(); } }
|
在需要的地方引入使用MinioClient使用,后续可以自己封装为一个工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| @Resource private MinioClient minioClient;
public void upload(MultipartFile file, String folder) { String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1); String uploadName = System.currentTimeMillis() + "." + suffix;
String finalName = folder + "/" + uploadName; try { PutObjectArgs build = PutObjectArgs.builder() .bucket("test") .object(finalName) .contentType(file.getContentType()) .stream(file.getInputStream(), file.getSize(), -1) .build(); minioClient.putObject(build); } catch (Exception e) { e.printStackTrace(); } }
|
想要搭建图床的话上床图片到MinIo中的话,可以自己写一个程序,在代码中实现上传到MinIo中,对于自定义图床的实现,可以参考我的另一篇文章自定义图床