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();