1、先启动minio
详细见 https://www.yuque.com/heart-z52oq/notes/67985da7-6af1-4dfb-a06a-2a35abcd2238#t1
或者 分布式文件存储系统MinIO_青青赵1的博客-CSDN博客
2、
步骤 1:添加 Minio 依赖项
在 pom.xml
文件中添加以下 Minio 依赖项:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.1</version>
</dependency>
步骤 2:配置 Minio 属性
PS: access-key 和 secret-key 需要提前配置好
在 application.properties
文件中添加以下属性:
# Minio Configuration
spring.minio.url=http://localhost:9000
spring.minio.access-key=minio
spring.minio.secret-key=minio123
spring.minio.bucket-name=mybucket
或者在 yml
文件中添加以下属性:
spring:
minio:
url: http://localhost:9000
access-key: minio
secret-key: minio123
bucket-name: test
步骤 3:创建 Minio 应用程序配置类
创建一个名为 MinioConfig
的类,并将其作为 Spring Bean 注册。
@Configuration
public class MinioConfig {
@Autowired
private Environment environment;
@Bean
public MinioClient minioClient() {
String url = environment.getProperty("spring.minio.url");
String accessKey = environment.getProperty("spring.minio.access-key");
String secretKey = environment.getProperty("spring.minio.secret-key");
return MinioClient.builder()
.endpoint(url)
.credentials(accessKey, secretKey)
.build();
}
}
步骤 4:编写控制器以上传和下载文件
以下是一个简单的控制器,可用于上传和下载文件:
@RestController
@RequestMapping("/files")
public class FileController {
@Autowired
private MinioClient minioClient;
@Autowired
private Environment environment;
@PostMapping
public String uploadFile(@RequestParam(value = "file") MultipartFile file) throws Exception {
String bucketName = environment.getProperty("spring.minio.bucket-name");
String fileName = file.getOriginalFilename();
InputStream inputStream = file.getInputStream();
minioClient.putObject(
PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(inputStream, -1, 10485760)
.build());
return "File uploaded successfully!";
}
@GetMapping("/{fileName}")
public ResponseEntity<Resource> downloadFile(@PathVariable String fileName) throws Exception {
String bucketName = environment.getProperty("spring.minio.bucket-name");
InputStream inputStream = minioClient.getObject(
GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
ByteArrayResource resource = new ByteArrayResource(IOUtils.toByteArray(inputStream));
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + fileName)
.contentType(MediaType.APPLICATION_OCTET_STREAM).contentLength(resource.contentLength())
.body(resource);
}
}