Minio技术
导入依赖:
<!--minio-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.3</version>
</dependency>
FileUploader.java:
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class FileUploader {
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {
// Create a minioClient with the MinIO server playground, its access key and secret key.
MinioClient minioClient =
MinioClient.builder()
.endpoint("https://play.min.io")
.credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
.build();
// Make 'asiatrip' bucket if not exist.
boolean found =
minioClient.bucketExists(BucketExistsArgs.builder().bucket("asiatrip").build());
if (!found) {
// Make a new bucket called 'asiatrip'.
minioClient.makeBucket(MakeBucketArgs.builder().bucket("asiatrip").build());
} else {
System.out.println("Bucket 'asiatrip' already exists.");
}
// Upload '/home/user/Photos/asiaphotos.zip' as object name 'asiaphotos-2015.zip' to bucket
// 'asiatrip'.
minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket("asiatrip")
.object("asiaphotos-2015.zip")
.filename("/home/user/Photos/asiaphotos.zip")
.build());
System.out.println(
"'/home/user/Photos/asiaphotos.zip' is successfully uploaded as "
+ "object 'asiaphotos-2015.zip' to bucket 'asiatrip'.");
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
System.out.println("HTTP trace: " + e.httpTrace());
}
}
}
编写上传文件代码:
@Service
@Slf4j
public class SysFileServiceImpl implements ISysFileService{
@Autowired
MinioConfig minioConfig;
/**
* 文件上传至Minio
* 使用try catch finally进行上传
* finally里进行资源的回收
*/
@Override
public AjaxResult upload(MultipartFile file) {
InputStream inputStream = null;
//创建Minio的连接对象
MinioClient minioClient = getClient();
String bucketName = minioConfig.getBucketName();
try {
//1.获取文件输入流
inputStream = file.getInputStream();
//2.获取文件名,并用UUID生成不重复的文件名
String filename = file.getOriginalFilename();
//创建文件名,防止重名
String objectName = UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf("."));
//3.按照日期分类,huike-crm/2023/01/01/目录下
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String dateString = sdf.format(new Date());
objectName=dateString+"/"+objectName;
//4.检查桶是否存在
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!isExist){
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());//如果不存在则创建桶
}
//上传文件
minioClient.putObject(PutObjectArgs
.builder()
.bucket(bucketName)//桶名称
.object(objectName)//文件名
.stream(inputStream,file.getSize(),-1)//需要上传的文件
.contentType(file.getContentType())//文件类型
.build());
/**
* 构建返回结果集
*/
AjaxResult ajax = AjaxResult.success();
/**
* 封装需要的数据进行返回
*/
ajax.put("url",minioConfig.getEndpoint()+"/"+bucketName+"/"+objectName);
ajax.put("fileName",filename);
return ajax;
}catch(Exception e){
e.printStackTrace();
return AjaxResult.error("上传失败");
}finally {
//防止内存泄漏
if (inputStream != null) {
try {
inputStream.close(); // 关闭流
} catch (IOException e) {
log.debug("inputStream close IOException:" + e.getMessage());
}
}
}
}
/**
* 免费提供一个获取Minio连接的方法
* 获取Minio连接
* @return
*/
private MinioClient getClient(){
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://"+minioConfig.getEndpoint()+":"+ minioConfig.getPort())
.credentials(minioConfig.getAccessKey(),minioConfig.getSecretKey())
.build();
return minioClient;
}
}