官网下载minio
我下载的是windows的
创个目录存放minio.exe,后续创建的文件夹都是在存放exe文件夹里的了。
访问IP:9000
minioadmin
springboot
pom.xml
建议7.1.0,每个版本之间改动很大
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
application.yml
minio:
endpoint: http://127.0.0.1
port: 9000
secure: false
accessKey: minioadmin
secretKey: minioadmin
MinioConfig.java
配置文件
import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MinioConfig {
@Value("${minio.endpoint}")
private String endpoint;//url
@Value("${minio.port}")
private int port;//端口号
@Value("${minio.secure}")
private boolean secure;//https?true:false
@Value("${minio.accessKey}")
private String accessKey;//账号
@Value("${minio.secretKey}")
private String secretKey;//密码
@Bean
public MinioClient getMinioClient(){
return MinioClient.builder().endpoint(endpoint, port, secure).credentials(accessKey, secretKey).build();
}
}
MinioUtil.java
工具类
import io.minio.*;
import io.minio.errors.*;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
@Component
public class MinioUtil {
@Resource
MinioConfig minioConfig;
/**
* 文件上传
*
* @param multipartFile 文件
*/
public String upload(MultipartFile multipartFile) throws InvalidBucketNameException, InsufficientDataException, IOException, NoSuchAlgorithmException, InvalidPortException, InvalidKeyException, InvalidEndpointException, XmlParserException, InternalException, RegionConflictException, ErrorResponseException, InvalidResponseException, ServerException {
PutObjectOptions putObjectOptions = new PutObjectOptions(multipartFile.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
putObjectOptions.setContentType(multipartFile.getContentType());
DateTimeFormatter yyyy = DateTimeFormatter.ofPattern("yyyy");
DateTimeFormatter MM = DateTimeFormatter.ofPattern("MM");
DateTimeFormatter dd = DateTimeFormatter.ofPattern("dd");
LocalDate localDate = LocalDate.now();//获取当前时间
String bucketName = localDate.format(yyyy);//以年为存储桶
String path = localDate.format(MM) + "/" + localDate.format(dd) + "/";//在年存储桶里面创建月日文件夹
boolean bucketExists = minioConfig.getMinioClient().bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!bucketExists) {//判断存储桶yyyy是否存在,不存在则创建
minioConfig.getMinioClient().makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
//设置读写权限
String read_write = "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\",\"s3:PutObject\",\"s3:AbortMultipartUpload\"],\"Resource\":[\"arn:aws:s3:::" + bucketName + "/*\"]}]}";
minioConfig.getMinioClient().setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(read_write).build());
}
//更换文件名称
String originalFilename = multipartFile.getOriginalFilename();
assert originalFilename != null;
String fileName = path + UUID.randomUUID().toString().replaceAll("-", "") + originalFilename.substring(originalFilename.lastIndexOf("."));
minioConfig.getMinioClient().putObject(PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(
multipartFile.getInputStream(), multipartFile.getSize(), -1)
.contentType(multipartFile.getContentType())
.build());
return bucketName + "/" + fileName;
}
/**
* 文件删除
*
* @param bucketName 存储桶名称
* @param fileName 文件名称
*/
public void delete(String bucketName, String fileName) throws InvalidPortException, InvalidEndpointException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException, ServerException {
minioConfig.getMinioClient().removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
}
}
MinioController.java
import io.minio.errors.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
@RestController
@RequestMapping("minio")
public class MinioController {
@Resource
private MinioUtil minioUtil;
/**
* 文件上传
* @param file 文件
*/
@PostMapping("upload")
public String upload(@RequestParam("file") MultipartFile file) throws InvalidBucketNameException, InsufficientDataException, IOException, NoSuchAlgorithmException, InvalidPortException, InvalidKeyException, InvalidEndpointException, XmlParserException, InternalException, RegionConflictException, ErrorResponseException, InvalidResponseException, ServerException {
return minioUtil.upload(file);
}
/**
* 删除文件
* @param bucketName 存储桶名称
* @param fileName 文件名称
*/
@DeleteMapping("delete")
public void delete(@RequestParam("bucketName") String bucketName,@RequestParam("fileName") String fileName) throws InvalidBucketNameException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidPortException, InvalidKeyException, InvalidEndpointException, InvalidResponseException, XmlParserException, InternalException, ServerException {
minioUtil.delete(bucketName, fileName);
}
}
postman测试
上传
删除
查看图片是通过9000端口去查看,不是50000端口
50000端口是管理图片。
版权声明:本文为weixin_43933728原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。