Return-Path: Delivered-To: apmail-jakarta-commons-dev-archive@apache.org Received: (qmail 35699 invoked from network); 26 Jun 2003 10:28:01 -0000 Received: from exchange.sun.com (192.18.33.10) by daedalus.apache.org with SMTP; 26 Jun 2003 10:28:01 -0000 Received: (qmail 16073 invoked by uid 97); 26 Jun 2003 10:30:36 -0000 Delivered-To: qmlist-jakarta-archive-commons-dev@nagoya.betaversion.org Received: (qmail 16066 invoked from network); 26 Jun 2003 10:30:35 -0000 Received: from daedalus.apache.org (HELO apache.org) (208.185.179.12) by nagoya.betaversion.org with SMTP; 26 Jun 2003 10:30:35 -0000 Received: (qmail 35470 invoked by uid 500); 26 Jun 2003 10:27:58 -0000 Mailing-List: contact commons-dev-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Developers List" Reply-To: "Jakarta Commons Developers List" Delivered-To: mailing list commons-dev@jakarta.apache.org Received: (qmail 35456 invoked by uid 500); 26 Jun 2003 10:27:57 -0000 Received: (qmail 35453 invoked from network); 26 Jun 2003 10:27:57 -0000 Received: from icarus.apache.org (208.185.179.13) by daedalus.apache.org with SMTP; 26 Jun 2003 10:27:57 -0000 Received: (qmail 85857 invoked by uid 1675); 26 Jun 2003 10:27:56 -0000 Date: 26 Jun 2003 10:27:56 -0000 Message-ID: <20030626102756.85856.qmail@icarus.apache.org> From: adrian@apache.org To: jakarta-commons-cvs@apache.org Subject: cvs commit: jakarta-commons/httpclient/src/contrib/org/apache/commons/httpclient/contrib/methods/multipart ContentType.java ContentTypeFilePart.java X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N adrian 2003/06/26 03:27:56 Added: httpclient/src/contrib/org/apache/commons/httpclient/contrib/methods/multipart ContentType.java ContentTypeFilePart.java Log: Added classes for detecting the content type. PR: Bug 20986 Submitted by: Eric Devlin with modifications from Adrian Sutton Revision Changes Path 1.1 jakarta-commons/httpclient/src/contrib/org/apache/commons/httpclient/contrib/methods/multipart/ContentType.java Index: ContentType.java =================================================================== /* * ==================================================================== * * 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.methods.multipart; import java.io.File; /** * This class provides mappings from file name extensions to content types. * * @author Eric Devlin * @author Adrian Sutton * * @version $Revision: 1.1 $ * * 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 final 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" } }; /** The constructor is intentionally private as the class only provides static methods. */ private ContentType() { } /** * 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) { String contentType = null; if (file != null) { contentType = get(file.getName()); } return contentType; } } 1.1 jakarta-commons/httpclient/src/contrib/org/apache/commons/httpclient/contrib/methods/multipart/ContentTypeFilePart.java Index: ContentTypeFilePart.java =================================================================== /* * $Header: /home/cvs/jakarta-commons/httpclient/src/contrib/org/apache/commons/httpclient/contrib/methods/multipart/ContentTypeFilePart.java,v 1.1 2003/06/26 10:27:56 adrian Exp $ * $Revision: 1.1 $ * $Date: 2003/06/26 10:27:56 $ * * ==================================================================== * * 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 * . * * [Additional notices, if required by prior licensing conditions] * */ package org.apache.commons.httpclient.contrib.methods.multipart; import java.io.File; import java.io.FileNotFoundException; import org.apache.commons.httpclient.methods.multipart.FilePart; import org.apache.commons.httpclient.methods.multipart.PartSource; /** A simple extension to {@link FilePart} that automatically determines the content type * of the file. * * @author Adrian Sutton * @version $Revision $ * * 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 ContentTypeFilePart extends FilePart { /** * ContentTypeFilePart constructor. * * @param name the name of the part * @param partSource the source for this part * @param charset the charset encoding for this part. */ public ContentTypeFilePart(String name, PartSource partSource, String charset) { super(name, partSource, ContentType.get(partSource.getFileName()), charset); } /** * ContentTypeFilePart constructor. * * @param name the name of the part * @param partSource the source for this part */ public ContentTypeFilePart(String name, PartSource partSource) { this(name, partSource, null); } /** * ContentTypeFilePart constructor. * * @param name the name of the part * @param file the file to post * @throws FileNotFoundException if the file does not exist */ public ContentTypeFilePart(String name, File file) throws FileNotFoundException { this(name, file, null); } /** * ContentTypeFilePart constructor. * * @param name the name of the part * @param file the file to post * @param charset the charset encoding for the file * @throws FileNotFoundException */ public ContentTypeFilePart(String name, File file, String charset) throws FileNotFoundException { super(name, file, ContentType.get(file), charset); } /** * ContentTypeFilePart constructor. * * @param name the name of the part * @param fileName the file name * @param file the file to post * @throws FileNotFoundException if the file does not exist */ public ContentTypeFilePart(String name, String fileName, File file) throws FileNotFoundException { super(name, fileName, file, ContentType.get(fileName), null); } /** * ContentTypeFilePart constructor. * * @param name the name of the part * @param fileName the file name * @param file the file to post * @param charset the charset encoding for the file * @throws FileNotFoundException if the file does not exist */ public ContentTypeFilePart(String name, String fileName, File file, String charset) throws FileNotFoundException { super(name, fileName, file, ContentType.get(file), charset); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-dev-help@jakarta.apache.org