@Service
public class SliceFileService {
@Resource
private MinioService minioService;
@Resource
private MinioProperties minioProperties;
private String getBucketPathDir(String md5) {
return DateUtil.format(DateUtil.date(), "yyyy/MM/dd/") + "slice/" + md5;
}
private String getBucketPath(String md5, Integer sliceIndex) {
return getBucketPathDir(md5) + "/slice_" + sliceIndex;
}
public void assertMd5Index(String md5, Integer indexOrTotal) {
Assert.notNull(md5, "文件md5不能为空");
Assert.notNull(indexOrTotal, "分片或总数不能为空");
}
public void upload(FileSliceUploadReq req) {
Assert.notNull(req, "上传对象不能为空");
Integer sliceIndex = req.getSliceIndex();
String md5 = req.getMd5();
assertMd5Index(md5, sliceIndex);
String bucketName = minioProperties.getBucketName();
String bucketPath = getBucketPath(md5, sliceIndex);
//保存minio
minioService.upload(bucketName, bucketPath, req.getFile());
}
private void removeSlice(String md5, Integer sliceTotal, String bucketName) {
//异步执行
ThreadPoolUtil.execute(() -> {
// 删除所有的临时分片文件
List<DeleteObject> delObjects = Stream.iterate(0, i -> ++i)
.limit(sliceTotal)
.map(i -> new DeleteObject(getBucketPath(md5, i)))
.collect(Collectors.toList());
minioService.removeFiles(bucketName, delObjects);
});
}
public SysFile composeFile(FileSliceUploadReq req, SysFile sysFile) {
String md5 = req.getMd5();
Integer total = req.getSliceTotal();
assertMd5Index(md5, total);
List<ComposeSource> source = Stream.iterate(0, i -> ++i).limit(total).map(i ->
ComposeSource.builder()
.bucket(minioProperties.getBucketName())
.object(getBucketPath(md5, i))
.build())
.collect(Collectors.toList());
minioService.composeFile(sysFile.getBucketName(), sysFile.getBucketPath(), source);
removeSlice(req.getMd5(), req.getSliceTotal(), sysFile.getBucketName());
StatObjectResponse objectInfo = minioService.getObjectInfo(sysFile.getBucketName(), sysFile.getBucketPath());
if (null != objectInfo) {
sysFile.setSize(objectInfo.size());
}
return sysFile;
}
}
java 分片上传
最新推荐文章于 2026-06-23 21:03:17 发布
这篇文章描述了一个名为SliceFileService的Java类,它处理文件的切片上传、合成以及临时文件的删除。服务使用Minio服务进行存储操作,包括检查MD5和索引、上传文件片段、合并文件并清理临时分片。

3708

被折叠的 条评论
为什么被折叠?



