DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20986>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20986

Contributed utility for determing content type from file type extension

           Summary: Contributed utility for determing content type from file
                    type extension
           Product: Commons
           Version: 2.0 Beta 2
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Normal
          Priority: Other
         Component: HttpClient
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


/*
 * ====================================================================
 *
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2002-2003 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *    any, must include the following acknowlegement:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The names "The Jakarta Project", "Commons", and "Apache Software
 *    Foundation" must not be used to endorse or promote products derived
 *    from this software without prior written permission. For written
 *    permission, please contact [EMAIL PROTECTED]
 *
 * 5. Products derived from this software may not be called "Apache"
 *    nor may "Apache" appear in their names without prior written
 *    permission of the Apache Group.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 * [Additional notices, if required by prior licensing conditions]
 *
 */

package org.apache.commons.httpclient.contrib.utils;

import java.io.File;
import java.io.IOException;

/**
 * This class provides mappings from file name extensions to content types.
 *
 * @author <a href="mailto:[EMAIL PROTECTED]">Eric Devlin</a>
 * 
 * DISCLAIMER: HttpClient developers DO NOT actively support this component.
 * The component is provided as a reference material, which may be inappropriate
 * to be used without additional customization.
 */

public class ContentType {

        /** Mime Type mappings 'liberated' from Tomcat4.1.18/conf/web.xml*/
        public static final String[][] MIME_TYPE_MAPPINGS =     
                {       { "abs",                "audio/x-mpeg" },
                        { "ai",                 "application/postscript" },
                        { "aif",                "audio/x-aiff" },
                        { "aifc",               "audio/x-aiff" },
                        { "aiff",               "audio/x-aiff" },
                        { "aim",                "application/x-aim" },
                        { "art",                "image/x-jg" },
                        { "asf",                "video/x-ms-asf" },
                        { "asx",                "video/x-ms-asf" },
                        { "au",                 "audio/basic" },
                        { "avi",                "video/x-msvideo" },
                        { "avx",                "video/x-rad-screenplay" },
                        { "bcpio",              "application/x-bcpio" },
                        { "bin",                "application/octet-stream" },
                        { "bmp",                "image/bmp" },
                        { "body",               "text/html" },
                        { "cdf",                "application/x-cdf" },
                        { "cer",                "application/x-x509-ca-cert" },
                        { "class",              "application/java" },
                        { "cpio",               "application/x-cpio" },
                        { "csh",                "application/x-csh" },
                        { "css",                "text/css" },
                        { "dib",                "image/bmp" },
                        { "doc",                "application/msword" },
                        { "dtd",                "text/plain" },
                        { "dv",                 "video/x-dv" },
                        { "dvi",                "application/x-dvi" },
                        { "eps",                "application/postscript" },
                        { "etx",                "text/x-setext" },
                        { "exe",                "application/octet-stream" },
                        { "gif",                "image/gif" },
                        { "gtar",               "application/x-gtar" },
                        { "gz",                 "application/x-gzip" },
                        { "hdf",                "application/x-hdf" },
                        { "hqx",                "application/mac-binhex40" },
                        { "htc",                "text/x-component" },
                        { "htm",                "text/html" },
                        { "html",               "text/html" },
                        { "hqx",                "application/mac-binhex40" },
                        { "ief",                "image/ief" },
                        { "jad",                "text/vnd.sun.j2me.app-
descriptor" },
                        { "jar",                "application/java-archive" },
                        { "java",               "text/plain" },
                        { "jnlp",               "application/x-java-jnlp-
file" },
                        { "jpe",                "image/jpeg" },
                        { "jpeg",               "image/jpeg" },
                        { "jpg",                "image/jpeg" },
                        { "js",                 "text/javascript" },
                        { "jsf",                "text/plain" },
                        { "jspf",               "text/plain" },
                        { "kar",                "audio/x-midi" },
                        { "latex",              "application/x-latex" },
                        { "m3u",                "audio/x-mpegurl" },
                        { "mac",                "image/x-macpaint" },
                        { "man",                "application/x-troff-man" },
                        { "me",                 "application/x-troff-me" },
                        { "mid",                "audio/x-midi" },
                        { "midi",               "audio/x-midi" },
                        { "mif",                "application/x-mif" },
                        { "mov",                "video/quicktime" },
                        { "movie",              "video/x-sgi-movie" },
                        { "mp1",                "audio/x-mpeg" },
                        { "mp2",                "audio/x-mpeg" },
                        { "mp3",                "audio/x-mpeg" },
                        { "mpa",                "audio/x-mpeg" },
                        { "mpe",                "video/mpeg" },
                        { "mpeg",               "video/mpeg" },
                        { "mpega",              "audio/x-mpeg" },
                        { "mpg",                "video/mpeg" },
                        { "mpv2",               "video/mpeg2" },
                        { "ms",                 "application/x-wais-source" },
                        { "nc",                 "application/x-netcdf" },
                        { "oda",                "application/oda" },
                        { "pbm",                "image/x-portable-bitmap" },
                        { "pct",                "image/pict" },
                        { "pdf",                "application/pdf" },
                        { "pgm",                "image/x-portable-graymap" },
                        { "pic",                "image/pict" },
                        { "pict",               "image/pict" },
                        { "pls",                "audio/x-scpls" },
                        { "png",                "image/png" },
                        { "pnm",                "image/x-portable-anymap" },
                        { "pnt",                "image/x-macpaint" },
                        { "ppm",                "image/x-portable-pixmap" },
                        { "ps",                 "application/postscript" },
                        { "psd",                "image/x-photoshop" },
                        { "qt",                 "video/quicktime" },
                        { "qti",                "image/x-quicktime" },
                        { "qtif",               "image/x-quicktime" },
                        { "ras",                "image/x-cmu-raster" },
                        { "rgb",                "image/x-rgb" },
                        { "rm",                 "application/vnd.rn-
realmedia" },
                        { "roff",               "application/x-troff" },
                        { "rtf",                "application/rtf" },
                        { "rtx",                "text/richtext" },
                        { "sh",                 "application/x-sh" },
                        { "shar",               "application/x-shar" },
                        { "smf",                "audio/x-midi" },
                        { "snd",                "audio/basic" },
                        { "src",                "application/x-wais-source" },
                        { "sv4cpio",    "application/x-sv4cpio" },
                        { "sv4crc",             "application/x-sv4crc" },
                        { "swf",                "application/x-shockwave-
flash" },
                        { "t",                  "application/x-troff" },
                        { "tar",                "application/x-tar" },
                        { "tcl",                "application/x-tcl" },
                        { "tex",                "application/x-tex" },
                        { "texi",               "application/x-texinfo" },
                        { "texinfo",    "application/x-texinfo" },
                        { "tif",                "image/tiff" },
                        { "tiff",               "image/tiff" },
                        { "tr",                 "application/x-troff" },
                        { "tsv",                "text/tab-separated-values" },
                        { "txt",                "text/plain" },
                        { "ulw",                "audio/basic" },
                        { "ustar",              "application/x-ustar" },
                        { "xbm",                "image/x-xbitmap" },
                        { "xml",                "text/xml" },
                        { "xpm",                "image/x-xpixmap" },
                        { "xsl",                "text/xml" },
                        { "xwd",                "image/x-xwindowdump" },
                        { "wav",                "audio/x-wav" },
                        { "svg",                "image/svg+xml" },
                        { "svgz",               "image/svg+xml" },
                        { "wbmp",               "image/vnd.wap.wbmp" },
                        { "wml",                "text/vnd.wap.wml" },
                        { "wmlc",               "application/vnd.wap.wmlc" },
                        { "wmls",               "text/vnd.wap.wmlscript" },
                        { "wmlscriptc", "application/vnd.wap.wmlscriptc" },
                        { "wrl",                "x-world/x-vrml" },
                        { "Z",                  "application/x-compress" },
                        { "z",                  "application/x-compress" },
                        { "zip",                "application/zip" } };

    /**
     * Get the content type based on the extension of the file name<br>
     *
     * @param fileName for which the content type is to be determined.
     *
     * @return the content type for the file or null if no mapping was
     * possible.
     */
        public static String get( String fileName  ) {
                String contentType = null;

                if ( fileName != null ) {
                        int extensionIndex = fileName.lastIndexOf( '.' );
                        if ( extensionIndex != -1 ) {
                                if ( extensionIndex + 1 < fileName.length() ) {
                                        String extension = fileName.substring( 
extensionIndex + 1 );
                                        for( int i = 0; i < 
MIME_TYPE_MAPPINGS.length; i++ ) {
                                                if ( extension.equals( 
MIME_TYPE_MAPPINGS[i][0] ) ) {
                                                        contentType = 
MIME_TYPE_MAPPINGS[i][1];
                                                        break;
                                                }
                                        }
                                }
                        }
                }

                return contentType;
        }

    /**
     * Get the content type based on the extension of the file name<br>
     *
     * @param file for which the content type is to be determined.
     *
     * @return the content type for the file or null if no mapping was
     * possible.
     *
     * @throws IOException if the construction of the canonical path for 
         * the file fails.
     */
        public static String get( File file ) 
                throws IOException
        {
                String contentType = null;

                if ( file != null ) {

                        contentType = get( file.getCanonicalPath() );
                }

                return contentType;
        }
}

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to