diff --git a/config/alfresco/templates/webscripts/org/alfresco/slingshot/download.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/slingshot/download.get.desc.xml index 92a58f7f4e..4fd72680a3 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/slingshot/download.get.desc.xml +++ b/config/alfresco/templates/webscripts/org/alfresco/slingshot/download.get.desc.xml @@ -7,6 +7,6 @@ /slingshot/node/{store_type}/{store_id}/{id}/content{property}/{filename}?a={attach?} argument user - required + required internal \ No newline at end of file diff --git a/config/alfresco/web-scripts-application-context.xml b/config/alfresco/web-scripts-application-context.xml index c1e3a18a4d..9b39c36c58 100644 --- a/config/alfresco/web-scripts-application-context.xml +++ b/config/alfresco/web-scripts-application-context.xml @@ -1855,6 +1855,7 @@ + diff --git a/source/java/org/alfresco/repo/web/scripts/content/ContentGet.java b/source/java/org/alfresco/repo/web/scripts/content/ContentGet.java index 46ee8f8660..4691ddcb36 100644 --- a/source/java/org/alfresco/repo/web/scripts/content/ContentGet.java +++ b/source/java/org/alfresco/repo/web/scripts/content/ContentGet.java @@ -142,16 +142,16 @@ public class ContentGet extends StreamContent implements ServletContextAware private void streamContentLocal(WebScriptRequest req, WebScriptResponse res, NodeRef nodeRef, boolean attach, QName propertyQName) throws IOException { String userAgent = req.getHeader("User-Agent"); - - boolean rfc5987Supported = (null != userAgent) && (userAgent.contains("MSIE") || userAgent.contains(" Chrome/") || userAgent.contains(" FireFox/")); + userAgent = userAgent != null ? userAgent.toLowerCase() : ""; + boolean rfc5987Supported = (userAgent.contains("msie") || userAgent.contains(" trident/") || userAgent.contains(" chrome/") || userAgent.contains(" firefox/")); if (attach && rfc5987Supported) { String name = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); - //IE use file extension to get mimetype - //So we set correct extension. see MNT-11246 - if(userAgent.contains("MSIE")) + // IE use file extension to get mimetype + // So we set correct extension. see MNT-11246 + if (userAgent.contains("msie") || userAgent.contains(" trident/")) { String mimeType = contentService.getReader(nodeRef, propertyQName).getMimetype(); if (!mimetypeService.getMimetypes(FilenameUtils.getExtension(name)).contains(mimeType)) diff --git a/source/java/org/alfresco/slingshot/web/scripts/SlingshotContentGet.java b/source/java/org/alfresco/slingshot/web/scripts/SlingshotContentGet.java index c80889dfd3..1f1c80874a 100644 --- a/source/java/org/alfresco/slingshot/web/scripts/SlingshotContentGet.java +++ b/source/java/org/alfresco/slingshot/web/scripts/SlingshotContentGet.java @@ -24,6 +24,8 @@ import java.util.Map; import org.alfresco.model.ContentModel; import org.alfresco.repo.Client; import org.alfresco.repo.Client.ClientType; +import org.alfresco.repo.transaction.RetryingTransactionHelper; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.web.scripts.content.ContentGet; import org.alfresco.service.cmr.activities.ActivityPoster; import org.alfresco.service.cmr.repository.NodeRef; @@ -48,6 +50,7 @@ public class SlingshotContentGet extends ContentGet { protected SiteService siteService; private ActivityPoster poster; + private RetryingTransactionHelper transactionHelper; public void setSiteService(SiteService siteService) { @@ -59,9 +62,12 @@ public class SlingshotContentGet extends ContentGet this.poster = poster; } - /* (non-Javadoc) - * @see org.alfresco.repo.web.scripts.content.ContentGet#execute(org.springframework.extensions.webscripts.WebScriptRequest, org.springframework.extensions.webscripts.WebScriptResponse) - */ + public void setTransactionHelper(RetryingTransactionHelper transactionHelper) + { + this.transactionHelper = transactionHelper; + } + + @Override public void execute(final WebScriptRequest req, final WebScriptResponse res) throws IOException { @@ -87,9 +93,17 @@ public class SlingshotContentGet extends ContentGet { filename = (String)this.nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); } - // post an activity - mirror the mechanism as if from the Share application - poster.postFileFolderActivity(ActivityPoster.DOWNLOADED, null, null, - site.getShortName(), null, nodeRef, filename, "documentlibrary", Client.asType(ClientType.webclient), null); + final String strFilename = filename; + transactionHelper.doInTransaction(new RetryingTransactionCallback() { + @Override + public Void execute() throws Throwable + { + // post an activity - mirror the mechanism as if from the Share application + poster.postFileFolderActivity(ActivityPoster.DOWNLOADED, null, null, + site.getShortName(), null, nodeRef, strFilename, "documentlibrary", Client.asType(ClientType.webclient), null); + return null; + } + }, false, true); } } }