/*
* Copyright (C) 2005-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see
* The URL to the servlet should be generated thus: *
/alfresco/download/attach/workspace/SpacesStore/0000-0000-0000-0000/myfile.pdf* or *
/alfresco/download/direct/workspace/SpacesStore/0000-0000-0000-0000/myfile.pdf* or *
/alfresco/download/[direct|attach]?path=/Company%20Home/MyFolder/myfile.pdf* The protocol, followed by either the store and Id (NodeRef) or instead specify a name based * encoded Path to the content, note that the filename element is used for mimetype lookup and * as the returning filename for the response stream. *
* The 'attach' or 'direct' element is used to indicate whether to display the stream directly * in the browser or download it as a file attachment. *
* By default, the download assumes that the content is on the
* {@link org.alfresco.model.ContentModel#PROP_CONTENT content property}.
* To retrieve the content of a specific model property, use a 'property' arg, providing the workspace,
* node ID AND the qualified name of the property.
*
* Like most Alfresco servlets, the URL may be followed by a valid 'ticket' argument for authentication: * ?ticket=1234567890 *
* And/or also followed by the "?guest=true" argument to force guest access login for the URL. If the * guest=true parameter is used the current session will be logged out and the guest user logged in. * Therefore upon completion of this request the current user will be "guest". *
* If the user attempting the request is not authorised to access the requested node the login page
* will be redirected to.
*
* @author Kevin Roast
* @author gavinc
*/
public class DownloadContentServlet extends BaseDownloadContentServlet
{
private static final long serialVersionUID = -576405943603122206L;
private static Log logger = LogFactory.getLog(DownloadContentServlet.class);
private static final String DOWNLOAD_URL = "/d/" + URL_ATTACH + "/{0}/{1}/{2}/{3}";
private static final String BROWSER_URL = "/d/" + URL_DIRECT + "/{0}/{1}/{2}/{3}";
@Override
protected Log getLogger()
{
return logger;
}
/**
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*/
protected void doGet(final HttpServletRequest req, final HttpServletResponse res)
throws ServletException, IOException
{
if (logger.isDebugEnabled())
{
String queryString = req.getQueryString();
logger.debug("Authenticating request to URL: " + req.getRequestURI() +
((queryString != null && queryString.length() > 0) ? ("?" + queryString) : ""));
}
AuthenticationStatus status = servletAuthenticate(req, res);
if (status == AuthenticationStatus.Failure)
{
return;
}
ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext());
TransactionService transactionService = serviceRegistry.getTransactionService();
RetryingTransactionCallback