if the directory the file should be written is not existing, it is created now
[mir.git] / source / mircoders / servlet / ServletModuleUploadedMedia.java
index c6d74f3..fd66221 100755 (executable)
@@ -7,7 +7,7 @@ import mir.media.MediaHelper;
 import mir.media.MirMedia;
 import mir.media.MirMediaException;
 import mir.media.MirMediaUserException;
-import mir.misc.FileUtil;
+import mir.misc.MirConfig;
 import mir.misc.MpRequest;
 import mir.misc.StringUtil;
 import mir.misc.WebdbMultipartRequest;
@@ -24,6 +24,8 @@ import mircoders.storage.DatabaseMediafolder;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
+import javax.servlet.ServletContext;
+
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.GregorianCalendar;
@@ -70,20 +72,33 @@ public abstract class ServletModuleUploadedMedia
       if (contentType.equals("text/plain") ||
               contentType.equals("application/octet-stream")) {
         /**
-         * This is just a temporary way to get the content-type via
-         * the .extension , we could maybe use a magic method, by looking
-         * at the header (first few bytes) of the file. (like the file(1)
-         * command).
-         * The Oreilly method  relies on the content-type that the client
-         * browser sends and that sometimes is application-octet stream with
+         * Fallback to finding the mime-type through the standard ServletApi
+         * ServletContext getMimeType() method.
+         *
+         * This is a way to get the content-type via the .extension,
+         * we could maybe use a magic method as an additional method of
+         * figuring out the content-type, by looking at the header (first
+         * few bytes) of the file. (like the file(1) command). We could 
+         * also call the "file" command through Runtime. This is an
+         * option that I almost prefer as it is already implemented and
+         * exists with an up-to-date map on most modern Unix like systems.
+         * I haven't found a really nice implementation of the magic method
+         * in pure java yet.
+         *
+         * The first method we try thought is the "Oreilly method". It
+         * relies on the content-type that the client browser sends and 
+         * that sometimes is application-octet stream with
          * broken/mis-configured browsers.
          *
-         * The map file should be Mir/content-types.properties, it's the
-         * default Sun Java file with some additional entries that it did
-         * not have. So if you support a new media type you have to make
-         * sure that it is in this file -mh
+         * The map file we use for the extensions is the standard web-app
+         * deployment descriptor file (web.xml). See Mir's web.xml or see
+         * your Servlet containers (most likely Tomcat) documentation.
+         * So if you support a new media type you have to make sure that 
+         * it is in this file -mh
          */
-        contentType = FileUtil.guessContentTypeFromName(fileName);
+        ServletContext ctx =
+          (ServletContext)MirConfig.getPropAsObject("ServletContext");
+        contentType = ctx.getMimeType(fileName);
         if (contentType == null)
           contentType = "text/plain"; // rfc1867 says this is the default
       }