Author: jdonnerstag
Date: Thu Apr 9 17:48:50 2009
New Revision: 763749
URL: http://svn.apache.org/viewvc?rev=763749&view=rev
Log:
fixed WICKET-2217 Add MD5 checksum to FileUpload component for uploaded files
Issue: WICKET-2217
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java?rev=763749&r1=763748&r2=763749&view=diff
==============================================================================
---
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
(original)
+++
wicket/trunk/wicket/src/main/java/org/apache/wicket/markup/html/form/upload/FileUpload.java
Thu Apr 9 17:48:50 2009
@@ -19,12 +19,15 @@
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.IClusterable;
import org.apache.wicket.Session;
+import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.util.file.Files;
import org.apache.wicket.util.upload.FileItem;
@@ -102,6 +105,63 @@
}
/**
+ * Get the MD5 checksum.
+ *
+ * @return The MD5 checksum of the file
+ */
+ public byte[] getMD5()
+ {
+ MessageDigest digest;
+ try
+ {
+ digest = java.security.MessageDigest.getInstance("MD5");
+ }
+ catch (NoSuchAlgorithmException ex)
+ {
+ throw new WicketRuntimeException(
+ "Your java runtime does not support MD5
digests. Please see java.security.MessageDigest.getInstance(\"MD5\"",
+ ex);
+ }
+
+ if (item.isInMemory())
+ {
+ digest.update(getBytes());
+ return digest.digest();
+ }
+
+ InputStream in = null;
+ try
+ {
+ in = item.getInputStream();
+ byte[] buf = new byte[Math.min((int)item.getSize(),
4096 * 10)];
+ int len;
+ while (-1 != (len = in.read(buf)))
+ {
+ digest.update(buf, 0, len);
+ }
+ return digest.digest();
+ }
+ catch (IOException ex)
+ {
+ throw new WicketRuntimeException("Error while reading
input data for MD5 checksum", ex);
+ }
+ finally
+ {
+ if (in != null)
+ {
+ try
+ {
+ in.close();
+ }
+ catch (IOException ex)
+ {
+ // ignore
+ }
+ }
+ }
+ }
+
+ /**
* @since 1.2
* @return name of uploaded client side file
*/