From 20d8577bf2d36e95a53409f1c692c0d118ccf409 Mon Sep 17 00:00:00 2001 From: Marc P Date: Tue, 28 Jan 2025 13:12:49 -0600 Subject: [PATCH] [CCAP-639] Handle Tika returning a special mime type for older versions of Office products (#644) * [CCAP-639] Handle Tika returning a special mime type for older versions of Office products * [CCAP-639] Handle Tika returning a special mime type for older versions of Office products --- .../library/file/FileValidationService.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/formflow/library/file/FileValidationService.java b/src/main/java/formflow/library/file/FileValidationService.java index 8be038ec..edbe47c6 100644 --- a/src/main/java/formflow/library/file/FileValidationService.java +++ b/src/main/java/formflow/library/file/FileValidationService.java @@ -12,6 +12,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.MimeType; import org.springframework.web.multipart.MultipartFile; +import java.util.stream.Collectors; /** * This service is intended to help with miscellaneous file things. This service will help with checking mime types, both proper @@ -75,11 +76,21 @@ public FileValidationService( .sorted() .toList(); - ACCEPTED_MIME_TYPES = ACCEPTED_FILE_EXTS.stream() + List acceptedMimeTypes = ACCEPTED_FILE_EXTS.stream() .filter(FILE_EXT_MIME_TYPE_MAP::containsKey) .map(FILE_EXT_MIME_TYPE_MAP::get) .sorted() - .toList(); + .collect(Collectors.toList()); + + if (ACCEPTED_FILE_EXTS.contains(".doc")) { + // It's possible that Tika will return this for an MS Office document instead of the + // correct Mime Type, if the version of Office is old or Tika can't quite determine if + // it's a Word vs Excel document (for example) + // This little workaround will insert Tika's returned value in those cases of ambiguity. + acceptedMimeTypes.add(new MimeType("application", "x-tika-msoffice")); + } + + ACCEPTED_MIME_TYPES = acceptedMimeTypes; log.info(String.format("User provided file types: %s", userProvidedFileTypes)); log.info(String.format("Files accepted by the server: %s", String.join(JOIN_DELIMITER, ACCEPTED_FILE_EXTS)));