Update of /var/cvs/applications/resources/src/org/mmbase/servlet
In directory james.mmbase.org:/tmp/cvs-serv4564

Modified Files:
        HandleServlet.java 
Log Message:
  MMB-1750


See also: 
http://cvs.mmbase.org/viewcvs/applications/resources/src/org/mmbase/servlet
See also: http://www.mmbase.org/jira/browse/MMB-1750


Index: HandleServlet.java
===================================================================
RCS file: 
/var/cvs/applications/resources/src/org/mmbase/servlet/HandleServlet.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- HandleServlet.java  26 Sep 2008 10:12:26 -0000      1.3
+++ HandleServlet.java  9 Dec 2008 15:59:54 -0000       1.4
@@ -28,7 +28,7 @@
  * specialized servlets. The mime-type is always application/x-binary, forcing 
the browser to
  * download.
  *
- * @version $Id: HandleServlet.java,v 1.3 2008/09/26 10:12:26 michiel Exp $
+ * @version $Id: HandleServlet.java,v 1.4 2008/12/09 15:59:54 michiel Exp $
  * @author Michiel Meeuwissen
  * @since  MMBase-1.6
  * @see ImageServlet
@@ -43,7 +43,7 @@
 
     private static Cache<Integer, Integer> jpegSizes = null;
 
-    protected Map getAssociations() {
+    protected Map<String, Integer> getAssociations() {
         Map a = super.getAssociations();
         // Can do the following:
         a.put("attachments", 0);
@@ -150,13 +150,17 @@
      */
     protected String getContentDisposition(QueryParts query, Node node, String 
def) {
         String fileNamePart = query.getFileName();
-        if(fileNamePart != null && fileNamePart.startsWith("/inline/")) {
+        if(fileNamePart != null) {
+            if (fileNamePart.startsWith("/inline/")) {
             return "inline";
-        } else {
+            }
+            if (fileNamePart.startsWith("/attachment/")) {
+                return "attachment";
+            }
+        }
             String cd = 
node.getNodeManager().getProperty("Content-Disposition");
             return cd == null ? def : cd;
         }
-    }
 
 
     /**
@@ -209,6 +213,10 @@
     }
 
 
+    protected long getSize(NodeManager manager, Node node) {
+        return node.getSize("handle");
+    }
+
     /**
      * Serves a node with a byte[] handle field as an attachment.
      */
@@ -262,11 +270,18 @@
                 l = byteArray.length;
                 jpegSizes.put(node.getNumber(), l);
                 bytes = new ByteArrayInputStream(byteArray);
+                res.setHeader("X-MMBase-IECompatibleJpeg", "This image was 
filtered, because Microsoft Internet Explorer might crash otherwise");
             } else {
+                int s = (int) getSize(manager, node);
+                if (s != l) {
                 bytes = new 
IECompatibleJpegInputStream(node.getInputStreamValue("handle"));
+                    res.setHeader("X-MMBase-IECompatibleJpeg", "This image was 
filtered, because Microsoft Internet Explorer might crash otherwise (" + (s - 
l) + " bytes thrown away)");
+                } else {
+                    bytes = node.getInputStreamValue("handle");
+                }
+
             }
             jpegLength = l;
-            res.setHeader("X-MMBase-IECompatibleJpeg", "This image was 
filtered, because Microsoft Internet Explorer might crash otherwise");
         } else {
             bytes = node.getInputStreamValue("handle");
         }
@@ -278,14 +293,11 @@
         setCacheControl(res, node);
 
         if (jpegLength == -1) {
-            int size = -1;
-            if (manager.hasField("size")) {
-                size = node.getIntValue("size");
-            } else if (manager.hasField("filesize")) {
-                size = node.getIntValue("filesize");
-            }
+            int size = (int) getSize(manager, node);
             if (size >= 0) {
                 res.setContentLength(size);
+            } else {
+                log.warn("Size of handles not stored in " + manager);
             }
             log.debug("Serving node " + node.getNumber() + " with bytes " + 
size);
         } else {
_______________________________________________
Cvs mailing list
Cvs@lists.mmbase.org
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to