DEBUG:修正某些情况下,文件流没有正确关闭的问题。

This commit is contained in:
刘小平 2024-11-13 16:24:36 +08:00
parent f550db2b77
commit a2adf3b411
3 changed files with 20 additions and 29 deletions

View File

@ -1,11 +1,6 @@
package org.liuxp.minioplus.core.common.utils;
import cn.hutool.core.date.LocalDateTimeUtil;
import net.coobird.thumbnailator.Thumbnails;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* 对象存储工具类
@ -31,22 +26,4 @@ public class CommonUtil {
return LocalDateTimeUtil.format(LocalDateTimeUtil.now(), "yyyy/MM");
}
/**
* 根据文件流和重设宽度进行图片压缩
* @param inputStream 文件流
* @param width 宽度
* @return 压缩后的图片文件流
* @throws IOException IO异常
*/
public static ByteArrayOutputStream resizeImage(InputStream inputStream, int width)throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
Thumbnails.of(inputStream)
.width(width)
.outputQuality(0.9f)
.toOutputStream(outputStream);
return outputStream;
}
}

View File

@ -6,7 +6,9 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.util.IdUtil;
import lombok.Cleanup;
import lombok.extern.slf4j.Slf4j;
import net.coobird.thumbnailator.Thumbnails;
import org.liuxp.minioplus.api.model.bo.CreateUploadUrlReqBO;
import org.liuxp.minioplus.api.model.bo.CreateUploadUrlRespBO;
import org.liuxp.minioplus.api.model.dto.FileMetadataInfoDTO;
@ -400,12 +402,24 @@ public class StorageEngineServiceImpl implements StorageEngineService {
private void generatePreviewImage(FileMetadataInfoVo metadata) {
try {
if (Boolean.FALSE.equals(metadata.getIsPreview())) {
// 获取原图的bytes
byte[] imageOriginBytes = minioS3Client.getObject(StorageBucketEnums.IMAGE.getCode(), metadata.getStoragePath() + "/" + metadata.getFileMd5());
// 压缩缩略图
ByteArrayOutputStream largeImage = CommonUtil.resizeImage(new ByteArrayInputStream(imageOriginBytes), properties.getThumbnail().getSize());
byte[] largeImageBytes = largeImage.toByteArray();
minioS3Client.putObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), CommonUtil.getObjectName(metadata.getFileMd5()), new ByteArrayInputStream(largeImageBytes), largeImageBytes.length, metadata.getFileMimeType());
// 定义文件流
@Cleanup ByteArrayInputStream imageOriginInputStream = new ByteArrayInputStream(imageOriginBytes);
@Cleanup ByteArrayOutputStream previewImage = new ByteArrayOutputStream();
// 根据文件流和重设宽度进行图片压缩
Thumbnails.of(imageOriginInputStream)
.width(properties.getThumbnail().getSize())
.outputQuality(0.9f)
.toOutputStream(previewImage);
byte[] previewImageBytes = previewImage.toByteArray();
@Cleanup ByteArrayInputStream previewImageInputStream = new ByteArrayInputStream(previewImageBytes);
minioS3Client.putObject(StorageBucketEnums.IMAGE_PREVIEW.getCode(), CommonUtil.getObjectName(metadata.getFileMd5()), previewImageInputStream, previewImageBytes.length, metadata.getFileMimeType());
metadata.setIsPreview(Boolean.TRUE);
FileMetadataInfoUpdateDTO fileMetadataInfoUpdateDTO = BeanUtil.copyProperties(metadata, FileMetadataInfoUpdateDTO.class);
metadataRepository.update(fileMetadataInfoUpdateDTO);
@ -421,7 +435,8 @@ public class StorageEngineServiceImpl implements StorageEngineService {
@Override
public Boolean createFile(FileMetadataInfoSaveDTO saveDTO, byte[] fileBytes) {
// 写入文件
return createFile(saveDTO, new ByteArrayInputStream(fileBytes));
@Cleanup ByteArrayInputStream inputStream = new ByteArrayInputStream(fileBytes);
return createFile(saveDTO, inputStream);
}
@Override

View File

@ -1,6 +1,5 @@
package org.liuxp.minioplus.core.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Pair;