public String getContentType(InputStream inputStream, String fileName) { String contentType = getContentType(fileName); if (!contentType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) { return contentType; } List<MimeType> mimeTypes = new ArrayList<MimeType>(MimeUtil.getMimeTypes(inputStream)); MimeType mimeType = mimeTypes.get(0); if ((mimeTypes.size() > 1) && (mimeType instanceof TextMimeType)) { mimeType = mimeTypes.get(1); } contentType = mimeType.getMediaType() + StringPool.SLASH + mimeType.getSubType(); if (contentType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) { contentType = getContentType(fileName); } else if (contentType.equals(ContentTypes.APPLICATION_ZIP)) { String contentTypeByFileName = getContentType(fileName); if (contentTypeByFileName.contains("vnd.openxmlformats")) { contentType = contentTypeByFileName; } } if (_log.isDebugEnabled()) { _log.debug("Content type " + contentType + " returned for " + fileName); } return contentType; }
@SuppressWarnings("unchecked") @Override public String probeContentType(Path path) throws IOException { Collection<MimeType> mimeTypes = mimeUtil.getMimeTypes(path.toUri().toURL()); if (null == mimeTypes || mimeTypes.size() <= 0) { return null; } MimeType mimeType = mimeTypes.iterator().next(); return String.format("%s/%s", mimeType.getMediaType(), mimeType.getSubType()); }