From 7f631e732385d9082ded5487a6218f5887e8b52a Mon Sep 17 00:00:00 2001 From: Francesco Mangiacrapa Date: Fri, 24 Feb 2017 13:49:09 +0000 Subject: [PATCH] patched download external image for version id git-svn-id: http://svn.d4science-ii.research-infrastructures.eu/gcube/trunk/portlets/user/workspace-tree-widget@144265 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../workspace/server/DownloadServlet.java | 41 +++++++++++++++++-- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java b/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java index b4b7c1f..2578129 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/DownloadServlet.java @@ -18,6 +18,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; +import org.gcube.common.homelibary.model.versioning.WorkspaceVersion; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; @@ -255,7 +256,20 @@ public class DownloadServlet extends HttpServlet{ if(versionID!=null){ logger.info("Downloading version id: "+versionID); //TODO MUST BE ADDED SIZE FOR VERSIONED FILE - is = externalFile.downloadVersion(versionID); + WorkspaceVersion vers = externalFile.getVersion(versionID); + if(vers!=null){ + long versionSize = vers.getSize(); //just one read + versionSize = versionSize>0?versionSize:-1; + if(versionSize>0) + resp = setContentLength(resp, versionSize); + + is = externalFile.downloadVersion(versionID); + }else{ + logger.error("Error file version "+versionID+" not found in the server-side. Refresh and try again."); + handleError(urlRedirectOnError, req, resp, itemId, HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error file version "+versionID+" not found in the server-side. Refresh and try again."); + return; + } + }else{ resp = setContentLength(resp, externalFile.getLength()); is = externalFile.getData(); @@ -286,9 +300,30 @@ public class DownloadServlet extends HttpServlet{ String contentDisposition = viewContent?"inline":"attachment"; resp.setHeader( "Content-Disposition", contentDisposition+"; filename=\"" + itemName + "\"" ); resp.setContentType(externalImage.getMimeType()); - resp = setContentLength(resp, externalImage.getLength()); + InputStream is; + if(versionID!=null){ + logger.info("Downloading version id: "+versionID); + //TODO MUST BE ADDED SIZE FOR VERSIONED FILE + WorkspaceVersion vers = externalImage.getVersion(versionID); + if(vers!=null){ + long versionSize = vers.getSize(); //just one read + versionSize = versionSize>0?versionSize:-1; + if(versionSize>0) + resp = setContentLength(resp, versionSize); + + is = externalImage.downloadVersion(versionID); + }else{ + logger.error("Error file version "+versionID+" not found in the server-side. Refresh and try again."); + handleError(urlRedirectOnError, req, resp, itemId, HttpServletResponse.SC_INTERNAL_SERVER_ERROR +": Error file version "+versionID+" not found in the server-side. Refresh and try again."); + return; + } + + }else{ + resp = setContentLength(resp, externalImage.getLength()); + is = externalImage.getData(); + } + OutputStream out = resp.getOutputStream(); - InputStream is = externalImage.getData(); IOUtils.copy(is, out); is.close();