From a6449221db29f20511edac00a3640bd7cbffc02d Mon Sep 17 00:00:00 2001 From: Kevin Roast Date: Fri, 11 Aug 2006 14:16:52 +0000 Subject: [PATCH] . Added support for 'Last-Modified' response header value and 'If-Modified-Since' request header value in the DownloadContentServlet. - browsers can now correctly cache Alfresco content based on last-modified date of the node. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@3485 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../app/servlet/DownloadContentServlet.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/java/org/alfresco/web/app/servlet/DownloadContentServlet.java b/source/java/org/alfresco/web/app/servlet/DownloadContentServlet.java index ea9835c25b..951f1c2b3f 100644 --- a/source/java/org/alfresco/web/app/servlet/DownloadContentServlet.java +++ b/source/java/org/alfresco/web/app/servlet/DownloadContentServlet.java @@ -21,6 +21,7 @@ import java.io.UnsupportedEncodingException; import java.net.SocketException; import java.net.URLEncoder; import java.text.MessageFormat; +import java.util.Date; import java.util.StringTokenizer; import javax.servlet.ServletException; @@ -35,6 +36,7 @@ import org.alfresco.service.cmr.repository.ContentReader; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.MimetypeService; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.PermissionService; @@ -170,6 +172,7 @@ public class DownloadContentServlet extends BaseServlet // get the services we need to retrieve the content ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext()); + NodeService nodeService = serviceRegistry.getNodeService(); ContentService contentService = serviceRegistry.getContentService(); PermissionService permissionService = serviceRegistry.getPermissionService(); @@ -184,6 +187,21 @@ public class DownloadContentServlet extends BaseServlet return; } + // check If-Modified-Since header and set Last-Modified header as appropriate + Date modified = (Date)nodeService.getProperty(nodeRef, ContentModel.PROP_MODIFIED); + long modifiedSince = req.getDateHeader("If-Modified-Since"); + if (modifiedSince > 0L) + { + // round the date to the ignore millisecond value which is not supplied by header + long modDate = (modified.getTime() / 1000L) * 1000L; + if (modDate <= modifiedSince) + { + res.setStatus(304); + return; + } + } + res.setDateHeader("Last-Modified", modified.getTime()); + if (attachment == true) { // set header based on filename - will force a Save As from the browse if it doesn't recognise it