[MMBASE CVS] applications/resources/src/org/mmbase/servlet HandleServlet.java
Update of /var/cvs/applications/resources/src/org/mmbase/servlet In directory james.mmbase.org:/tmp/cvs-serv3410 Modified Files: HandleServlet.java Log Message: typo See also: http://cvs.mmbase.org/viewcvs/applications/resources/src/org/mmbase/servlet Index: HandleServlet.java === RCS file: /var/cvs/applications/resources/src/org/mmbase/servlet/HandleServlet.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -b -r1.4 -r1.5 --- HandleServlet.java 9 Dec 2008 15:59:54 - 1.4 +++ HandleServlet.java 24 Apr 2009 06:26:34 - 1.5 @@ -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.4 2008/12/09 15:59:54 michiel Exp $ + * @version $Id: HandleServlet.java,v 1.5 2009/04/24 06:26:34 michiel Exp $ * @author Michiel Meeuwissen * @since MMBase-1.6 * @see ImageServlet @@ -43,6 +43,7 @@ private static Cache jpegSizes = null; +@Override protected Map getAssociations() { Map a = super.getAssociations(); // Can do the following: @@ -56,6 +57,7 @@ * Takes care of the 'expire' init-parameter. * {...@inheritdoc} */ +@Override public void init() throws ServletException { super.init(); log = Logging.getLoggerInstance(HandleServlet.class); @@ -78,7 +80,7 @@ return "JPEGSizes"; } public String getDescription() { -return "HandleServlet may ditch some bytes from Jpeg-steams to please IE"; +return "HandleServlet may ditch some bytes from Jpeg-streams to please IE"; } }; @@ -220,7 +222,7 @@ /** * Serves a node with a byte[] handle field as an attachment. */ - +@Override public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { QueryParts query = readQuery(req, res); Node queryNode = getNode(query); ___ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs
[MMBASE CVS] applications/resources/src/org/mmbase/servlet HandleServlet.java
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 - 1.3 +++ HandleServlet.java 9 Dec 2008 15:59:54 - 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 jpegSizes = null; -protected Map getAssociations() { +protected Map 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
[MMBASE CVS] applications/resources/src/org/mmbase/servlet HandleServlet.java
Update of /var/cvs/applications/resources/src/org/mmbase/servlet In directory james.mmbase.org:/tmp/cvs-serv25560 Modified Files: HandleServlet.java Log Message: MMB-1415. Making sure length is always served See also: http://cvs.mmbase.org/viewcvs/applications/resources/src/org/mmbase/servlet See also: http://www.mmbase.org/jira/browse/MMB-1415 Index: HandleServlet.java === RCS file: /var/cvs/applications/resources/src/org/mmbase/servlet/HandleServlet.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -b -r1.2 -r1.3 --- HandleServlet.java 3 Sep 2008 17:18:05 - 1.2 +++ HandleServlet.java 26 Sep 2008 10:12:26 - 1.3 @@ -17,6 +17,7 @@ import javax.servlet.http.*; import org.mmbase.bridge.*; +import org.mmbase.cache.Cache; import org.mmbase.util.*; import org.mmbase.util.logging.*; @@ -27,7 +28,7 @@ * specialized servlets. The mime-type is always application/x-binary, forcing the browser to * download. * - * @version $Id: HandleServlet.java,v 1.2 2008/09/03 17:18:05 michiel Exp $ + * @version $Id: HandleServlet.java,v 1.3 2008/09/26 10:12:26 michiel Exp $ * @author Michiel Meeuwissen * @since MMBase-1.6 * @see ImageServlet @@ -40,6 +41,8 @@ private boolean isIECompatibleJpeg = true; +private static Cache jpegSizes = null; + protected Map getAssociations() { Map a = super.getAssociations(); // Can do the following: @@ -69,6 +72,18 @@ if (ieCompat != null) { isIECompatibleJpeg = Boolean.valueOf(ieCompat).booleanValue(); } +if (isIECompatibleJpeg && jpegSizes == null) { +jpegSizes = new Cache(5000) { +public String getName() { +return "JPEGSizes"; +} +public String getDescription() { +return "HandleServlet may ditch some bytes from Jpeg-steams to please IE"; +} + +}; +jpegSizes.putCache(); +} } // just to get HandleServlet in the stacktrace. @@ -228,8 +243,6 @@ if (node.isNull("handle")) { return; } -InputStream bytes = node.getInputStreamValue("handle"); - //remove additional information left by PhotoShop 7 in jpegs //this information may crash Internet Exploder. that's why you need to remove it. @@ -239,14 +252,23 @@ //However they break many applications, including Quark and, significantly, //various versions of Internet Explorer on various platforms. -boolean canSendLength = true; +int jpegLength = -1; -if (isIECompatibleJpeg) { - if (mimeType.equals("image/jpeg") || mimeType.equals("image/jpg")) { - bytes = new IECompatibleJpegInputStream(bytes); - canSendLength = false; - //res.setHeader("X-MMBase-IECompatibleJpeg", "This image was filtered, because Microsoft Internet Explorer might crash otherwise"); +final InputStream bytes; +if (isIECompatibleJpeg && (mimeType.equals("image/jpeg") || mimeType.equals("image/jpg"))) { +Integer l = jpegSizes.get(node.getNumber()); +if (l == null) { +byte[] byteArray = IECompatibleJpegInputStream.process(node.getByteValue("handle")); +l = byteArray.length; +jpegSizes.put(node.getNumber(), l); +bytes = new ByteArrayInputStream(byteArray); +} else { +bytes = new IECompatibleJpegInputStream(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"); } if (!setContent(query, node, mimeType)) { @@ -255,7 +277,7 @@ setExpires(res, node); setCacheControl(res, node); -if (canSendLength) { +if (jpegLength == -1) { int size = -1; if (manager.hasField("size")) { size = node.getIntValue("size"); @@ -267,7 +289,8 @@ } log.debug("Serving node " + node.getNumber() + " with bytes " + size); } else { -log.debug("Serving node " + node.getNumber() + " with unknown size, because IE sucks"); +res.setContentLength(jpegLength); +log.debug("Serving node " + node.getNumber() + " with bytes " + jpegLength); } sendBytes(res, bytes); } ___ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs
[MMBASE CVS] applications/resources/src/org/mmbase/servlet HandleServlet.java ImageServlet.java
Update of /var/cvs/applications/resources/src/org/mmbase/servlet In directory james.mmbase.org:/tmp/cvs-serv2732 Modified Files: HandleServlet.java ImageServlet.java Log Message: MMB-1715 See also: http://cvs.mmbase.org/viewcvs/applications/resources/src/org/mmbase/servlet See also: http://www.mmbase.org/jira/browse/MMB-1715 Index: HandleServlet.java === RCS file: /var/cvs/applications/resources/src/org/mmbase/servlet/HandleServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -b -r1.1 -r1.2 --- HandleServlet.java 25 Sep 2007 12:29:54 - 1.1 +++ HandleServlet.java 3 Sep 2008 17:18:05 - 1.2 @@ -27,7 +27,7 @@ * specialized servlets. The mime-type is always application/x-binary, forcing the browser to * download. * - * @version $Id: HandleServlet.java,v 1.1 2007/09/25 12:29:54 michiel Exp $ + * @version $Id: HandleServlet.java,v 1.2 2008/09/03 17:18:05 michiel Exp $ * @author Michiel Meeuwissen * @since MMBase-1.6 * @see ImageServlet @@ -131,17 +131,25 @@ } /** - * Sets the content disposition header. - * @return true on success + * @since MMBase-1.9 */ -protected boolean setContent(QueryParts query, Node node, String mimeType) throws IOException { -String disposition; +protected String getContentDisposition(QueryParts query, Node node, String def) { String fileNamePart = query.getFileName(); if(fileNamePart != null && fileNamePart.startsWith("/inline/")) { -disposition = "inline"; +return "inline"; } else { -disposition = "attachment"; +String cd = node.getNodeManager().getProperty("Content-Disposition"); +return cd == null ? def : cd; } +} + + +/** + * Sets the content disposition header. + * @return true on success + */ +protected boolean setContent(QueryParts query, Node node, String mimeType) throws IOException { +String disposition = getContentDisposition(query, node, "attachment"); query.getResponse().setHeader("Content-Disposition", disposition + "; filename=\"" + getFileName(node, null, "mmbase-attachment")+ "\""); //res.setHeader("X-MMBase-1", "Not sending Content-Disposition because this might confuse Microsoft Internet Explorer"); return true; Index: ImageServlet.java === RCS file: /var/cvs/applications/resources/src/org/mmbase/servlet/ImageServlet.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -b -r1.3 -r1.4 --- ImageServlet.java 7 Aug 2007 08:11:59 - 1.3 +++ ImageServlet.java 3 Sep 2008 17:18:05 - 1.4 @@ -29,7 +29,7 @@ * images), which you have to create yourself before calling this servlet. The cache() function of * Images can be used for this. An URL can be gotten with cachepath(). * - * @version $Id: ImageServlet.java,v 1.3 2007/08/07 08:11:59 michiel Exp $ + * @version $Id: ImageServlet.java,v 1.4 2008/09/03 17:18:05 michiel Exp $ * @author Michiel Meeuwissen * @since MMBase-1.6 * @seeorg.mmbase.module.builders.AbstractImages @@ -101,8 +101,8 @@ } else { // 'images', but as you see this is not explicit, so you can also name your image builder otherwise. originalNode = node; } - -query.getResponse().setHeader("Content-Disposition", "inline; filename=\"" + getFileName(node, originalNode, "mmbase-image")+ "\""); +String disposition = getContentDisposition(query, node, "inline"); +query.getResponse().setHeader("Content-Disposition", disposition + "; filename=\"" + getFileName(node, originalNode, "mmbase-image")+ "\""); return true; } ___ Cvs mailing list Cvs@lists.mmbase.org http://lists.mmbase.org/mailman/listinfo/cvs