001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.request;
016    
017    import java.io.File;
018    import java.io.InputStream;
019    
020    /**
021     *  Represents a file uploaded from a client side form.
022     * 
023     *  @author Howard Lewis Ship
024     *  @since 1.0.8
025     *
026     **/
027    
028    public interface IUploadFile
029    {
030            /**
031             *  Returns the name of the file that was uploaded.  This
032             *  is just the filename portion of the complete path.
033             * 
034             **/
035    
036            public String getFileName();
037    
038            /**
039             *  Returns the complete path, as reported by the client
040             *  browser.  Different browsers report different things
041             *  here.
042             * 
043             * 
044             *  @since 2.0.4
045             * 
046             **/
047            
048            public String getFilePath();
049    
050            /**
051             *  Returns an input stream of the content of the file.  There is no guarantee
052             *  that this stream will be valid after the end of the current request cycle,
053             *  so it should be processed immediately.
054             * 
055             *  <p>As of release 1.0.8, this will be a a {@link java.io.ByteArrayInputStream},
056             *  but that, too, may change (a future implementation may upload the stream
057             *  to a temporary file and return an input stream from that).
058             * 
059             **/
060    
061            public InputStream getStream();
062        
063        /**
064         *  Returns the MIME type specified when the file was uploaded.  May return null
065         *  if the content type is not known.
066         * 
067         *  @since 2.2
068         * 
069         **/
070        
071        public String getContentType();
072        
073        /**
074         * Writes the content of the file to a known location.  This should
075         * be invoked at most once.  In a standard
076         * implementation based on Jakarta FileUpload, this will often
077         * be implemented efficiently as a file rename.
078         * 
079         * @since 3.0
080         */
081        
082        public void write(File file);
083        
084        /**
085         * Returns true if the uploaded content is in memory.  False generally
086         * means the content is stored in a temporary file.
087         */
088        
089        public boolean isInMemory();
090        
091        /**
092         * Returns the size, in bytes, of the uploaded content.
093         * 
094         * @since 3.0
095         **/
096        
097        public long getSize(); 
098    }