Index: yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/MagicMimeTypeFileItem.java =================================================================== --- yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/MagicMimeTypeFileItem.java (revision 23476) +++ yui/src/main/java/org/hippoecm/frontend/plugins/yui/upload/MagicMimeTypeFileItem.java (revision ) @@ -15,20 +15,13 @@ */ package org.hippoecm.frontend.plugins.yui.upload; -import eu.medsea.mimeutil.MimeType; -import eu.medsea.mimeutil.MimeUtil; +import org.apache.tika.Tika; import org.apache.wicket.util.upload.DiskFileItem; import org.apache.wicket.util.upload.FileItem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.util.Collection; +import java.io.*; public class MagicMimeTypeFileItem implements FileItem { @SuppressWarnings("unused") @@ -38,40 +31,31 @@ private FileItem delegate; private String contentType; - private static final String MAGIC_MIME_DETECTOR = "eu.medsea.mimeutil.detector.MagicMimeMimeDetector"; - private static final String EXTENSIONS_MIME_DETECTOR = "eu.medsea.mimeutil.detector.ExtensionMimeDetector"; + private static final Tika tika = new Tika(); public MagicMimeTypeFileItem(FileItem delegate) { this.delegate = delegate; - - if(MimeUtil.getMimeDetector(MAGIC_MIME_DETECTOR) == null) { - MimeUtil.registerMimeDetector(MAGIC_MIME_DETECTOR); - } + } - if(MimeUtil.getMimeDetector(EXTENSIONS_MIME_DETECTOR) == null) { - MimeUtil.registerMimeDetector(EXTENSIONS_MIME_DETECTOR); - } - } /** - * Microsoft and OpenOffice files aren't correctly detected based on Magic bytes, so fall back on extensions - * detection for these mimetypes. Also, do a second detection run based on extesion for - * mimetype=application/octen-stream + * MimeType resolved with tika, removed previous functionality for fallback on MS Office and OpenOffice files * - * .odt, .ods and .odp are detected as application/zip - * .xsl and .ppt are detected as application/msword - * * @param fileItem * @return The best matching mimetype for this fileItem */ private String resolveMimeType(FileItem fileItem) { - Collection mimeTypes = null; + String mimeType = null; - if(fileItem instanceof DiskFileItem && !fileItem.isInMemory()) { + if (fileItem instanceof DiskFileItem && !fileItem.isInMemory()) { - mimeTypes = MimeUtil.getMimeTypes(((DiskFileItem)fileItem).getStoreLocation()); + try { + mimeType = tika.detect(((DiskFileItem) fileItem).getStoreLocation()); + } catch (IOException e) { + log.error("", e); + } } else { InputStream inputStream = null; try { inputStream = fileItem.getInputStream(); - mimeTypes = MimeUtil.getMimeTypes(new BufferedInputStream(inputStream)); + mimeType = tika.detect(new BufferedInputStream(inputStream)); } catch (IOException e) { log.warn("IOException prevented retrieval of mimetype; using default", e); } finally { @@ -84,26 +68,14 @@ } } } - if (mimeTypes != null && mimeTypes.size() == 1) { - MimeType mimeType = (MimeType) mimeTypes.iterator().next(); - if (mimeType.getMediaType().equals("application")) { - if(mimeType.getSubType().equals("msword") || mimeType.getSubType().equals("zip") || mimeType.getSubType().equals("octet-stream")) { - Collection extensionBasedMimeTypes = MimeUtil.getMimeTypes(fileItem.getName()); - if(extensionBasedMimeTypes != null && extensionBasedMimeTypes.size() > 0) { - mimeTypes = extensionBasedMimeTypes; + if (mimeType != null) { + return mimeType; - } + } - } - } - } - if(mimeTypes != null && mimeTypes.size() > 0) { - MimeType mimeType = (MimeType) mimeTypes.iterator().next(); - return mimeType.toString(); - } return fileItem.getContentType(); } public String getContentType() { - if(contentType == null) { + if (contentType == null) { contentType = resolveMimeType(delegate); } return contentType; Index: yui/pom.xml =================================================================== --- yui/pom.xml (revision 26267) +++ yui/pom.xml (revision ) @@ -58,6 +58,12 @@ org.onehippo.yui yui-2.xx-sources + + org.apache.tika + tika-core + 0.6 + provided + net.sourceforge.htmlunit