You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2010/11/30 19:53:49 UTC

svn commit: r1040699 - in /wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util: file/Files.java upload/DiskFileItem.java

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());
 		}
 	}