in digital-document-service/src/main/java/com/epam/digital/data/platform/dgtldcmnt/detector/DigitalDocumentMediaTypeDetector.java [44:76]
public MediaType detect(InputStream input, Metadata metadata) throws IOException {
var mediaType = defaultDetector.detect(input, metadata);
log.trace("Detected media type - '{}'", mediaType);
if (mediaType.equals(MediaType.parse(DocumentConstants.SIGNATURE_TYPE))) {
log.trace("As media type is - '{}'. Checking filename extension",
DocumentConstants.SIGNATURE_TYPE);
// if file extension is p7s then return found media type
var name = metadata.get(TikaCoreProperties.RESOURCE_NAME_KEY);
var extension = FilenameUtils.getExtension(name);
if (DocumentConstants.P7S_EXTENSION.equals(extension)) {
log.trace("As filename extension is '{}' then return found media type - '{}'",
DocumentConstants.P7S_EXTENSION, mediaType);
return mediaType;
}
log.trace("Filename extension is not '{}'. "
+ "Skip first '{}' bytes in input stream and detect again",
DocumentConstants.P7S_EXTENSION, SIGNATURE_BYTES_LENGTH);
input.mark(SIGNATURE_BYTES_LENGTH);
// file is signed so skip first 65 bytes and detect again
try {
input.readNBytes(SIGNATURE_BYTES_LENGTH);
var newMediaType = defaultDetector.detect(new BufferedInputStream(input), metadata);
log.trace("Detected media type for signed file - '{}'", newMediaType);
return newMediaType;
} finally {
input.reset();
}
}
return mediaType;
}