关键代码
public Result<String> uploadFile(@RequestParam("file") MultipartFile file) {
try {
// 生成唯一的文件名
String originalFileName = file.getOriginalFilename();
// 获取当前日期并格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String currentDate = sdf.format(new Date());
// 构造目录路径
String directoryPath = currentDate;
//将格式化日期拼接到文件名前形成文件夹
String uniqueFileName = directoryPath + "/" + minioUtil.generateUniqueFileName(originalFileName);
InputStream inputStream = file.getInputStream();
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(uniqueFileName)
.stream(inputStream, inputStream.available(), -1)
.contentType(file.getContentType())
.build()
);
return Result.OK(uniqueFileName);
} catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
e.printStackTrace();
return Result.error("Error uploading file to MinIO: " + e.getMessage());
}
}
在这个方法中:
-
SimpleDateFormat用于格式化当前日期。 -
currentDate变量包含了格式化后的日期字符串。 -
directoryPath是基于日期构造的目录路径。 -
objectName是最终的对象名称,它包含了目录路径和文件名。
当调用
uploadFile方法上传文件时,文件会被放入以当前日期命名的目录中。例如,如果今天是2024年1月1日,文件会被上传到名为 2024/01/01/ 的目录中。MinIO 是一个对象存储服务,它没有目录的概念,所有的对象都是直接存储在桶中。当上传一个文件时,MinIO 会自动创建存储桶和对象路径中的任何缺失部分。
例如,如果有一个名为
my-bucket/2024/01/01/file.txt 的文件路径,并且 my-bucket 存储桶和 2024/01/01/ 路径中的对象不存在,MinIO 会在上传文件时自动创建这些对象。因此,只需要构造正确的文件路径(包括目录),然后使用 MinIO 的
putObject 方法上传文件即可。MinIO 会处理路径中缺失的对象的创建。