diff --git a/src/main/java/cn/lihongjie/coal/file/service/FileService.java b/src/main/java/cn/lihongjie/coal/file/service/FileService.java index b0a6ccea..1272a1ab 100644 --- a/src/main/java/cn/lihongjie/coal/file/service/FileService.java +++ b/src/main/java/cn/lihongjie/coal/file/service/FileService.java @@ -25,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.apache.tika.Tika; +import org.apache.tika.config.TikaConfig; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -55,6 +56,7 @@ public class FileService extends BaseService { @Autowired private FileMapper mapper; @Autowired private ConversionService conversionService; private final Tika tika = new Tika(); + TikaConfig config = TikaConfig.getDefaultConfig(); @Value("${spring.profiles.active}") private String activateProfile; @@ -112,7 +114,8 @@ public class FileService extends BaseService { String sortKey, String code, String remarks, - String url, String base64) { + String url, + String base64) { long size = 0; InputStream fis = null; @@ -127,10 +130,13 @@ public class FileService extends BaseService { size = out.size(); } else if (StringUtils.isNotBlank(base64)) { - fis = new ByteArrayInputStream(Base64.getDecoder().decode(base64.replace("data:image/png;base64,", ""))); + fis = + new ByteArrayInputStream( + Base64.getDecoder() + .decode(base64.replace("data:image/png;base64,", ""))); size = fis.available(); - }else { + } else { throw new BizException("文件为空"); } @@ -153,12 +159,28 @@ public class FileService extends BaseService { Ctx.currentUser().getOrganizationId(), StringUtils.defaultIfBlank(dir, "public"))); InputStream inputStream = fis; - fileEntity.setObjectId( - UUID.randomUUID() + "." + FilenameUtils.getExtension(name.replace(":", "_"))); + String extension = FilenameUtils.getExtension(name.replace(":", "_")); + try (inputStream) { fileEntity.setMimeType(tika.detect(inputStream)); } + // if file ext is empty, get from mime type + + try { + + if (StringUtils.isBlank(extension)) { + extension = + config.getMimeRepository() + .getRegisteredMimeType(fileEntity.getMimeType()) + .getExtension().replace(".", ""); + } + } catch (Exception e) { + log.warn("获取文件扩展名失败", e); + } + + fileEntity.setObjectId(UUID.randomUUID() + "." + extension); + String objectKey = getObjectKey(fileEntity); fileEntity.setPublicUrl(uploadToOSS(objectKey, fis));