1.下载
MinIO | 高性能, Kubernetes 原生对象存储
小伙伴们进入官网选择对应的操作系统下载即可!
2.准备工作
2.1 运行Minio
下载完成之后输入下面的命令即可运行:
C:\minio.exe server F:\Data --console-address ":9001"
启动完之后可以看到两个地址,api这个是java中用到的端口号9000,下面这个是后台访问用到的端口号,
2.2 登录
根据网址(http://192.168.175.121:5050)进来之后 ,输入默认的账号密码即可登录进去,账号和密码在运行窗口会显示。
2.3 创建桶
2.3.1 如果是第一次使用,上来就会让你创建一个桶。
2.3.2 相对于阿里oss存储来说,Minio创建桶比较简单,只需输入名字就行
2.3.3 创建完之后我们可以看到桶的状态是私有的,点击private可以修改
2.3.4 我们还需要设置桶的accesskey和secretkey(创建完之后务必保存好),到此为止我们的准备工作就做完了!
3.测试
3.1 导入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
3.2 配置文件
minio:
endpoint: 127.0.0.1
port: 9000
accessKey: minioadmin
secretKey: minioadmin
secure: false
bucketName: huike-crm
configDir: /data/excel
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
private final static String HTTP = "http://";
//endPoint是一个URL,域名,IPv4或者IPv6地址
private String endpoint;
//TCP/IP端口号
private int port;
//accessKey类似于用户ID,用于唯一标识你的账户
private String accessKey;
//secretKey是你账户的密码
private String secretKey;
//如果是true,则用的是https而不是http,默认值是true
private Boolean secure;
//默认存储桶
private String bucketName;
}
3.3 编写配置类
@Configuration
@EnableConfigurationProperties(MinioProperties.class)
public class MinioConfig {
@Bean
public MinioClient minioClient(MinioProperties minioProperties) {
return MinioClient.builder()
.endpoint(minioProperties.getEndpoint(),minioProperties.getPort(),minioProperties.getSecure())
.credentials(minioProperties.getAccessKey(),minioProperties.getSecretKey())
.build();
}
}
3.4 编写文件上传的工具类(根据官方文档提供的参考代码按需修改即可)
@Component
public class MinioUtils {
@Autowired
private MinioProperties minioProperties;
public String upload(MultipartFile file) throws Exception {
MinioClient minioClient = MinioClient.builder().
endpoint("http://" + minioProperties.getEndpoint() + ":" + minioProperties.getPort())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey()).build();
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
}
String originalFilename = file.getOriginalFilename();
String substring = originalFilename.substring(originalFilename.lastIndexOf("."));
String objectName = UUID.randomUUID().toString() + substring;
String folderName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/MM/"));
objectName = folderName + objectName;
minioClient.putObject(PutObjectArgs.builder()
.bucket(minioProperties.getBucketName())
.object(objectName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build()
);
return "/" + minioProperties.getBucketName() + "/" + objectName;
}
}
3.5 controller
/**
* 通用上传请求
* 提示:将文件上传到minio中,返回的访问路径不是保存到data中,应该调用put方法存储
* @param file 文件名称
*/
@ApiOperation("文件-上传")
@PostMapping("/common/upload")
public AjaxResult fileUpload(MultipartFile file, HttpServletRequest request) throws Exception {
String upload = minioUtils.upload(file);
AjaxResult ajax = AjaxResult.success();
String url = "http://" + minioProperties.getEndpoint() + ":" + minioProperties.getPort() + upload;
ajax.put("url", url);
ajax.put("fileName", upload);
return ajax;
}
到此就完成了Minio存储文件,欢迎各位大佬留言!