Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。而且学习成本低,安装运维简单,开箱即用,提供 Java 客户端、JS 客户端,本文着重介绍Java上传文件到minio。文末有Windows安装包
1.启动minio
将minio.exe文件下载到电脑,选择一个文件夹作为上传文件的存放位置
在minio.exe文件所在的目录下打开cmd,启动命令:
minio.exe server D:\home (D:\home为上传文件的存放位置)
红色信息为minio的默认账户名和密码都为:minioadmin。至此minio启动成功,可以通过
http://localhost:9000 访问后台页面
2.导入minio依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.2</version>
<scope>compile</scope>
</dependency>
3.minio配置类:
/**
* Minio 配置类
*
*/
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig
{
/**
* 服务地址
*/
private String url;
/**
* 用户名
*/
private String accessKey;
/**
* 密码
*/
private String secretKey;
/**
* 存储桶名称
*/
private String bucketName;
public String getUrl()
{
return url;
}
public void setUrl(String url)
{
this.url = url;
}
public String getAccessKey()
{
return accessKey;
}
public void setAccessKey(String accessKey)
{
this.accessKey = accessKey;
}
public String getSecretKey()
{
return secretKey;
}
public void setSecretKey(String secretKey)
{
this.secretKey = secretKey;
}
public String getBucketName()
{
return bucketName;
}
public void setBucketName(String bucketName)
{
this.bucketName = bucketName;
}
@Bean
public MinioClient getMinioClient()
{
return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
}
}
4.判断储存桶是否存在
public static boolean bucketExists(String bucketName) {
boolean flag = false;
flag = client.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (flag) {
return true;
}
return false;
5.minio文件上传方法
public class MinioFileUtil
{
@Autowired
private MinioConfig minioConfig;
@Autowired
private MinioClient client;
/**
*
* @param file 上传的文件
* @return 访问地址
*/
public String uploadFile(MultipartFile file) throws Exception
{
String fileName = extractFilename(file); //对文件名进行编码
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName()) //储存桶名称
.object(fileName) //文件路径加文件名
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
client.putObject(args); //上传文件
//返回上传的路径
return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
}
}
6.文件名编码
public static final String extractFilename(MultipartFile file)
{
String fileName = file.getOriginalFilename();
String extension = getExtension(file);
fileName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension;
return fileName;
}
至此java上传文件到minio结束
minio安装包:https://wwm.lanzouv.com/iEtL90brw7ad 密码:hrk6