From 8e09ba5479d99d03cd3732198d7b9a4c4bef71fd Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Wed, 2 Jun 2010 13:25:04 +0000
Subject: [PATCH] LMS-1560 Download of files bigger than 2 GB is truncated

SVN: 16261
---
 .../server/AbstractDatasetDownloadServlet.java     | 14 ++++++++++----
 .../dss/generic/server/DatasetDownloadServlet.java |  3 +--
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java
index b44c7539a76..d4c75239879 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/AbstractDatasetDownloadServlet.java
@@ -176,7 +176,13 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet
             final HttpServletResponse response) throws IOException
     {
         response.setHeader("Content-Disposition", responseStream.getHeaderContentDisposition());
-        response.setContentLength(responseStream.getSize());
+        if (responseStream.getSize() <= Integer.MAX_VALUE)
+        {
+            response.setContentLength((int) responseStream.getSize());
+        } else
+        {
+            response.addHeader("Content-Length", Long.toString(responseStream.getSize()));
+        }
         response.setContentType(responseStream.getContentType());
 
         ServletOutputStream outputStream = null;
@@ -231,13 +237,13 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet
     {
         private final InputStream inputStream;
 
-        private final int size;
+        private final long size;
 
         private final String contentType;
 
         private final String headerContentDisposition;
 
-        public ResponseContentStream(InputStream inputStream, int size, String contentType,
+        public ResponseContentStream(InputStream inputStream, long size, String contentType,
                 String headerContentDisposition)
         {
             this.inputStream = inputStream;
@@ -251,7 +257,7 @@ abstract public class AbstractDatasetDownloadServlet extends HttpServlet
             return inputStream;
         }
 
-        public int getSize()
+        public long getSize()
         {
             return size;
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
index e28a6b57e28..d0e84908877 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/DatasetDownloadServlet.java
@@ -453,10 +453,9 @@ public class DatasetDownloadServlet extends AbstractDatasetDownloadServlet
     private static ResponseContentStream createResponseContentStream(File file, String displayMode)
             throws FileNotFoundException
     {
-        int size = (int) file.length();
         String contentType = getMimeType(file, displayMode.equals(TEXT_MODE_DISPLAY));
         String headerContentDisposition = "inline; filename=" + file.getName();
-        return new ResponseContentStream(new FileInputStream(file), size, contentType,
+        return new ResponseContentStream(new FileInputStream(file), file.length(), contentType,
                 headerContentDisposition);
     }
 
-- 
GitLab