Author: pete
Date: Tue Nov 30 18:53:49 2010
New Revision: 1040699

URL: http://svn.apache.org/viewvc?rev=1040699&view=rev
Log:
changes on file upload code:

- utilize existing i/o functionality
- better error checking during file i/o
- Files.copy(File, File) and Files.readBytes(File) added

Modified:
    
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
    
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/upload/DiskFileItem.java

Modified: 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java?rev=1040699&r1=1040698&r2=1040699&view=diff
==============================================================================
--- 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java 
(original)
+++ 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/file/Files.java 
Tue Nov 30 18:53:49 2010
@@ -16,10 +16,15 @@
  */
 package org.apache.wicket.util.file;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.io.Streams;
 import org.apache.wicket.util.string.Strings;
 
@@ -32,6 +37,13 @@ import org.apache.wicket.util.string.Str
 public class Files
 {
        /**
+        * Private constructor to prevent instantiation.
+        */
+       private Files()
+       {
+       }
+
+       /**
         * Strips off the given extension (probably returned from 
Files.extension()) from the path,
         * yielding a base pathname.
         * 
@@ -126,6 +138,27 @@ public class Files
        }
 
        /**
+        * read binary file fully
+        *
+        * @param file file to read
+        * @return byte array representing the content of the file
+        * @throws IOException is something went wrong
+        */
+       public static byte[] readBytes(File file) throws IOException
+       {
+               FileInputStream stream = new FileInputStream(file);
+
+               try
+               {
+                       return IOUtils.toByteArray(stream);
+               }
+               finally
+               {
+                       stream.close();
+               }
+       }
+
+       /**
         * Writes the given input stream to the given file
         * 
         * @param file
@@ -151,7 +184,7 @@ public class Files
                }
        }
 
-       private static String FORBIDDEN_IN_NAME = new String("\"*/:<>?\\|,");
+       private static String FORBIDDEN_IN_NAME = "\"*/:<>?\\|,";
 
        /**
         * <p>
@@ -173,10 +206,38 @@ public class Files
        }
 
        /**
-        * Private constructor to prevent instantiation.
+        * make a copy of a file
+        *
+        * @param sourceFile
+        *            source file that needs to be cloned
+        * @param targetFile
+        *            target file that should be a duplicate of source file
+        * @throws IOException
+        *            if something went wrong
         */
-       private Files()
+       public static void copy(File sourceFile, File targetFile) throws 
IOException
        {
-       }
+               BufferedInputStream in = null;
+               BufferedOutputStream out = null;
+
+               try
+               {
+                       in = new BufferedInputStream(new 
FileInputStream(sourceFile));
+                       out = new BufferedOutputStream(new 
FileOutputStream(targetFile));
+
+                       IOUtils.copy(in, out);
+               }
+               finally
+               {
+                       try
+                       {
+                               IOUtils.close(in);
 
+                       }
+                       finally
+                       {
+                               IOUtils.close(out);
+                       }
+               }
+       }
 }

Modified: 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/upload/DiskFileItem.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/upload/DiskFileItem.java?rev=1040699&r1=1040698&r2=1040699&view=diff
==============================================================================
--- 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/upload/DiskFileItem.java
 (original)
+++ 
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/upload/DiskFileItem.java
 Tue Nov 30 18:53:49 2010
@@ -16,8 +16,6 @@
  */
 package org.apache.wicket.util.upload;
 
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -29,8 +27,8 @@ import java.io.UnsupportedEncodingExcept
 import java.util.Map;
 
 import org.apache.wicket.util.file.FileCleaner;
+import org.apache.wicket.util.file.Files;
 import org.apache.wicket.util.io.DeferredFileOutputStream;
-import org.apache.wicket.util.io.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -67,13 +65,6 @@ public class DiskFileItem implements Fil
         */
        public static final String DEFAULT_CHARSET = "ISO-8859-1";
 
-
-       /**
-        * Size of buffer to use when writing an item to disk.
-        */
-       private static final int WRITE_BUFFER_SIZE = 2048;
-
-
        // ----------------------------------------------------------- Data 
members
 
 
@@ -284,24 +275,17 @@ public class DiskFileItem implements Fil
                        return cachedContent;
                }
 
-               byte[] fileData = new byte[(int)getSize()];
-               FileInputStream fis = null;
+               File file = dfos.getFile();
 
                try
                {
-                       fis = new FileInputStream(dfos.getFile());
-                       fis.read(fileData);
+                       return Files.readBytes(file);
                }
                catch (IOException e)
                {
-                       fileData = null;
+                       log.debug("failed to read content of file: " + 
file.getAbsolutePath(), e);
+                       return null;
                }
-               finally
-               {
-                       IOUtils.closeQuietly(fis);
-               }
-
-               return fileData;
        }
 
 
@@ -373,46 +357,30 @@ public class DiskFileItem implements Fil
        {
                if (isInMemory())
                {
-                       FileOutputStream fout = null;
+                       FileOutputStream fout = new FileOutputStream(file);
+
                        try
                        {
-                               fout = new FileOutputStream(file);
                                fout.write(get());
                        }
                        finally
                        {
-                               IOUtils.close(fout);
+                               fout.close();
                        }
                }
                else
                {
                        File outputFile = getStoreLocation();
+
                        if (outputFile != null)
                        {
                                /*
                                 * The uploaded file is being stored on disk in 
a temporary location so move it to
                                 * the desired file.
                                 */
-                               if (!outputFile.renameTo(file))
+                               if (outputFile.renameTo(file) == false)
                                {
-                                       BufferedInputStream in = null;
-                                       BufferedOutputStream out = null;
-                                       try
-                                       {
-                                               in = new 
BufferedInputStream(new FileInputStream(outputFile));
-                                               out = new 
BufferedOutputStream(new FileOutputStream(file));
-                                               byte[] bytes = new 
byte[WRITE_BUFFER_SIZE];
-                                               int s;
-                                               while ((s = in.read(bytes)) != 
-1)
-                                               {
-                                                       out.write(bytes, 0, s);
-                                               }
-                                       }
-                                       finally
-                                       {
-                                               IOUtils.closeQuietly(in);
-                                               IOUtils.closeQuietly(out);
-                                       }
+                                       Files.copy(outputFile, file);
                                }
                        }
                        else
@@ -438,7 +406,7 @@ public class DiskFileItem implements Fil
                File outputFile = getStoreLocation();
                if (outputFile != null && outputFile.exists())
                {
-                       if(outputFile.delete())
+                       if(Files.remove(outputFile) == false)
                                log.debug("failed to delete file: " + 
outputFile.getAbsolutePath());
                }
        }
@@ -558,7 +526,7 @@ public class DiskFileItem implements Fil
 
                if (outputFile != null && outputFile.exists())
                {
-                       if(outputFile.delete() == false)
+                       if(Files.remove(outputFile) == false)
                                log.debug("failed to delete file: " + 
outputFile.getAbsolutePath());
                }
        }


Reply via email to