hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 20986] New: - Contributed utility for determing content type from file type extension
Date Sat, 21 Jun 2003 13:41:45 GMT
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: commons-httpclient-dev@jakarta.apache.org
        ReportedBy: emdevlin@charter.net


/*
 * ====================================================================
 *
 * 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 apache@apache.org.
 *
 * 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:emdevlin@charter.net">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;
	}
}

Mime
View raw message