19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/methods/multipart/FilePartSource.java,v 1.10 2004/04/18 23:51:37 jsdever Exp $ 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * $Revision: 480424 $ 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $ 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ==================================================================== 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ==================================================================== 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This software consists of voluntary contributions made by many 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * individuals on behalf of the Apache Software Foundation. For more 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * information on the Apache Software Foundation, please see 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <http://www.apache.org/>. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.http.multipart; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.ByteArrayInputStream; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.File; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileInputStream; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.FileNotFoundException; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.InputStream; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A PartSource that reads from a File. 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author <a href="mailto:becke@u.washington.edu">Michael Becke</a> 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author <a href="mailto:mdiggory@latte.harvard.edu">Mark Diggory</a> 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a> 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since 2.0 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class FilePartSource implements PartSource { 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** File part file. */ 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private File file = null; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** File part file name. */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private String fileName = null; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor for FilePartSource. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param file the FilePart source File. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws FileNotFoundException if the file does not exist or 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cannot be read 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FilePartSource(File file) throws FileNotFoundException { 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.file = file; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (file != null) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!file.isFile()) { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new FileNotFoundException("File is not a normal file."); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!file.canRead()) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new FileNotFoundException("File is not readable."); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.fileName = file.getName(); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor for FilePartSource. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fileName the file name of the FilePart 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param file the source File for the FilePart 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws FileNotFoundException if the file does not exist or 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * cannot be read 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public FilePartSource(String fileName, File file) 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws FileNotFoundException { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(file); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fileName != null) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.fileName = fileName; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the length of the file 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the length of the file. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PartSource#getLength() 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getLength() { 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.file != null) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.file.length(); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return the current filename 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the filename. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PartSource#getFileName() 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String getFileName() { 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (fileName == null) ? "noname" : fileName; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new {@link FileInputStream} for the current filename. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the new input stream. 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws IOException If an IO problem occurs. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see PartSource#createInputStream() 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public InputStream createInputStream() throws IOException { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.file != null) { 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new FileInputStream(this.file); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new ByteArrayInputStream(new byte[] {}); 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 132