Primero presenta minio, nunca lo he usado antes
MinlO es un servicio de almacenamiento de objetos basado en el protocolo de código abierto Apache License v2.0. Es compatible con la interfaz del servicio de almacenamiento en la nube de Amazon S3 y es muy adecuado para almacenar datos no estructurados de gran capacidad. Por ejemplo, imágenes, videos, archivos de registro, datos de respaldo e imágenes de contenedores/máquinas virtuales, etc., y un archivo de objeto puede tener cualquier tamaño, desde unos pocos kb hasta un máximo de 5T. MinlO es un servicio muy ligero que se puede integrar fácilmente con otras aplicaciones, como NodeJS, Redis o MySQL.
MinIO es nativo de Kubernetes y es el único paquete de almacenamiento de objetos disponible en todas las nubes públicas, todas las distribuciones de Kubernetes, nubes privadas y en el perímetro. MinIO está definido por software y es 100 % de código abierto bajo GNU AGPL v3.
Aquí primero configure la información de minio en nacos:
Primera importación de dependencias minio:
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>${
minio.version}</version>
</dependency>
Inyectar en el controlador:
@Autowired
MinioClient minioClient;
@Autowired
private MinioConfig minioConfig;
@Value(value = "${minio.bucketName}")
private String bucket;
clase de configuración minio: MinioConfig es el siguiente:
@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();
}
}
Interfaz de carga de un solo archivo:
@PostMapping("/uploadFile")
R upload(MultipartFile file) throws Exception {
String fileName = FileUploadUtils.extractFilename(file);
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
minioClient.putObject(args);
System.out.println(fileName);
return R.ok(fileName);
}
Interfaz de carga de archivos múltiples:
@ApiOperation("多文件上传minio")
@PostMapping("/uploadAllFile")
R upload(MultipartFile[] files) throws Exception {
for (MultipartFile file : files) {
String fileName = FileUploadUtils.extractFilename(file);
PutObjectArgs args = PutObjectArgs.builder()
.bucket(minioConfig.getBucketName())
.object(fileName)
.stream(file.getInputStream(), file.getSize(), -1)
.contentType(file.getContentType())
.build();
minioClient.putObject(args);
System.out.println(fileName);
}
return R.ok();
}
Seleccionar varios archivos en cartero:
subir resultado: