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