之前我使用的是阿里云OSS,想了解阿里云OSS的小伙伴参考SpringBoot整合阿里云OSS
docker run -d -p 9000:9000 -p 9001:9001 --name minio -e MINIO_ACCESS_KEY=qbb -e MINIO_SECRET_KEY=startqbb -v /opt/minio/data:/data -v /opt/minio/config:/root/.minio minio/minio server /data --console-address ":9000" --address ":9001"
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.qbb
springboot-minio
1.0
org.springframework.boot
spring-boot-starter-parent
2.3.7.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
org.projectlombok
lombok
1.18.24
io.springfox
springfox-swagger2
2.7.0
io.springfox
springfox-swagger-ui
2.7.0
io.minio
minio
8.3.0
server:
port: 7200
spring:
application:
name: minio
app:
minio:
endpoint: http://192.168.137.72:9001
accessKey: qbb
secretKey: startqbb
bucket: qbb
注意:9000是我们浏览器访问控制台的端口,而9001是SDK代码操作的端口
package com.qbb.minio;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-05-20 15:45
* @Description:
*/
@SpringBootApplication
public class MinioApplication {
public static void main(String[] args) {
SpringApplication.run(MinioApplication.class, args);
}
}
package com.qbb.minio.config;
import com.google.common.base.Predicates;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-05-20 16:23
* @Description:swagger配置类
*/
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket adminApiConfig() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("minioApi")
.apiInfo(adminApiInfo())
.select()
//只显示admin路径下的页面
.paths(Predicates.and(PathSelectors.regex("/minio/.*")))
.build();
}
private ApiInfo adminApiInfo() {
return new ApiInfoBuilder()
.title("minio-API文档")
.version("1.0")
.contact(new Contact("QIUQIU&LL", "https://www.cnblogs.com/qbbit", "startqbb@163.com"))
.build();
}
}
package com.qbb.minio.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-05-20 18:57
* @Description:
*/
@ConfigurationProperties(prefix = "app.minio")
@EnableConfigurationProperties
@Configuration
@Data
public class MinioConfig {
private String endpoint;
private String accessKey;
private String secretKey;
private String bucket;
}
package com.qbb.minio.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-05-20 16:23
* @Description:
*/
@Api(tags = "minio文件管理")
@RestController
@RequestMapping("/minio")
public class FileController {
@ApiOperation("测试程序")
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
package com.qbb.minio.controller;
import com.qbb.minio.config.MinioConfig;
import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
import java.util.UUID;
/**
* @author QiuQiu&LL (个人博客:https://www.cnblogs.com/qbbit)
* @version 1.0
* @date 2022-05-20 16:23
* @Description:
*/
@Api(tags = "minio文件管理")
@RestController
@RequestMapping("/minio")
public class FileController {
@Autowired
private MinioConfig minioConfig;
@ApiOperation("测试程序")
@GetMapping("/hello")
public String hello() {
return "hello";
}
@ApiOperation("文件上传")
@PostMapping("/fileUpload")
public String fileUpload(MultipartFile file) {
/**
* 这里应该放在service层处理的,将上传的文件路径存入数据库,我就不这么麻烦了,直接返回给前端
*/
String bucket = minioConfig.getBucket();
String endpoint = minioConfig.getEndpoint();
String accessKey = minioConfig.getAccessKey();
String secretKey = minioConfig.getSecretKey();
// 1.获取文件名
String originalFilename = file.getOriginalFilename();
// 2.修改文件名,防止上传重复文件名,导致文件覆盖
String fileName = UUID.randomUUID().toString().replace("-", "") + "_" + originalFilename;
// 文件流
try (InputStream inputStream = file.getInputStream()) {
// 3.使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);
// 4.检查存储桶是否已经存在
boolean isExist = minioClient.bucketExists(bucket);
if (isExist) {
System.out.println("Bucket already exists");
} else {
// 不存在则创建一个名为bucket的存储桶,用于存储照片的zip文件。
minioClient.makeBucket(bucket);
}
// 6.上传参数设置项
PutObjectOptions options = new PutObjectOptions(inputStream.available(), -1);
// 7.设置此次上传的文件的内容类型
String contentType = file.getContentType();
options.setContentType(contentType);
// 8.上传
minioClient.putObject(bucket, fileName, inputStream, options);
// 9.访问路径
String url = endpoint + "/" + bucket + "/" + fileName;
return url;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
@ApiOperation("删除文件")
@DeleteMapping("/remove")
public boolean remove() {
try {
// 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
MinioClient minioClient = new MinioClient(minioConfig.getEndpoint(), minioConfig.getAccessKey(), minioConfig.getSecretKey());
// 从bucket中删除文件(文件名)。
minioClient.removeObject(minioConfig.getBucket(), "ed8aa56a8ec640d6a36a271ed4222605_xiaomi.png");
System.out.println("successfully removed mybucket/myobject");
return true;
} catch (Exception e) {
System.out.println("Error: " + e);
return false;
}
}
yum -y install ntp ntpdate:安装插件工具
hwclock --systohc:同步时间
docker restart minio镜像ID:重启镜像
页面更新:2024-05-01
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号