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