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