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
         */


Reply via email to