diff --git a/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java b/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java index 6b32bf3411..f5811b01ad 100644 --- a/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java +++ b/src/main/java/org/alfresco/repo/web/scripts/BufferedResponse.java @@ -261,9 +261,16 @@ public class BufferedResponse implements WrappingWebScriptResponse { if (logger.isDebugEnabled()) logger.debug("Writing Transactional response: size=" + outputStream.getLength()); - - outputStream.flush(); - FileCopyUtils.copy(outputStream.getInputStream(), res.getOutputStream()); + + try + { + outputStream.flush(); + FileCopyUtils.copy(outputStream.getInputStream(), res.getOutputStream()); + } + finally + { + outputStream.destroy(); + } } } catch (IOException e) diff --git a/src/main/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java b/src/main/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java index a9fa4eea83..c848eb05e7 100644 --- a/src/main/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java +++ b/src/main/java/org/alfresco/rest/framework/webscripts/ApiWebScript.java @@ -57,7 +57,6 @@ public abstract class ApiWebScript extends AbstractWebScript protected int memoryThreshold = 4 * 1024 * 1024; // 4mb protected long maxContentSize = (long) 4 * 1024 * 1024 * 1024; // 4gb protected TempOutputStreamFactory streamFactory = null; - protected TempOutputStreamFactory responseStreamFactory = null; protected TransactionService transactionService; public void setTransactionService(TransactionService transactionService) @@ -98,7 +97,6 @@ public abstract class ApiWebScript extends AbstractWebScript { File tempDirectory = TempFileProvider.getTempDir(tempDirectoryName); this.streamFactory = new TempOutputStreamFactory(tempDirectory, memoryThreshold, maxContentSize, false, false); - this.responseStreamFactory = new TempOutputStreamFactory(tempDirectory, memoryThreshold, maxContentSize, false, true); } @Override diff --git a/src/test/java/org/alfresco/rest/api/tests/NodeApiTest.java b/src/test/java/org/alfresco/rest/api/tests/NodeApiTest.java index 0d8bbaa0d3..6e14d98b0c 100644 --- a/src/test/java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/src/test/java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -2856,6 +2856,12 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); assertTrue("File size is 0 bytes", documentResp.getContent().getSizeInBytes().intValue() > 0); + + // Download text content - by default with Content-Disposition header + response = getSingle(NodesEntityResource.class, docId + "/content", null, 200); + + byte[] bytes = response.getResponseAsBytes(); + assertEquals(contentSize.intValue(), bytes.length); } private class UpdateNodeRunnable implements Runnable @@ -3705,6 +3711,57 @@ public class NodeApiTest extends AbstractSingleNetworkSiteTest getSingle(getNodeContentUrl(contentNodeId), null, null, headers, 304); } + /** + * Tests download of file/content using backed temp file for streaming. + *
+ * GET: + *
+ * {@literalGET: