<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Download content by uuid with streaming in Alfresco Archive</title>
    <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291306#M244436</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;In my case, the users knows the url to download the content. Users are programmers than obtain with their applications this url with a java webscript response that I have implemented, when they upload a file. The response of this upload returns for example the uuid and the filename.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I try to download manually a file with the url:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;http://&amp;lt;Alfresco_IP&amp;gt;/alfresco/download/attach/workspace/SpacesStore/def199df-03e3-4b8e-993a-6fe1aae02733/test.pdf&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This should be the ideal url that they can use to download, the problem is the ticket. They know the user and password of alfresco, but not the ticket, because they not logged in. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Solution 1. Are any url with "user" and "password" params instead of "ticket" param? Is the ideal.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Solution 2. Not use the url directly. I thank on a webscript to log in, obtain the ticket and call this url, but you recommend me a servlet better? For curiosity, why servlet are better option than a webscript? Is for the streaming with big files? I know webscripts, but I don't find examples with servlets. I don't know how it works. Where I put this servlet on alfresco and declare it to be open and users can call it? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again!&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 06 Aug 2014 10:58:00 GMT</pubDate>
    <dc:creator>spilby</dc:creator>
    <dc:date>2014-08-06T10:58:00Z</dc:date>
    <item>
      <title>Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291302#M244432</link>
      <description>I want to download content from alfresco by the uuid of the node. This content may be a big file, bigger than 500MB. What's the best way to download large contents with streaming? Using the DownloadContentServlet? Or implementing a java backed webscript doing something like this:ContentReader conten</description>
      <pubDate>Mon, 04 Aug 2014 14:40:37 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291302#M244432</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-04T14:40:37Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291303#M244433</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I suggest you to use DownloadContentServlet,it allow large files to be streamed directly to the browser response stream.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 04 Aug 2014 15:11:05 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291303#M244433</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-08-04T15:11:05Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291304#M244434</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Oks, thanks for the suggest. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I need authentication. I give to users an url to download the documents with the uuid. My first idea is give the direct servlet url, (/alfresco/download/direct/workspace/store/nodeId/filename) but because I need authentication, I supose this is not possible. Is it?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My second idea is implement a java backed webscript to authenticate with user and password first. And the users can call to my webscript to download the document. But the second problem is… User don't know the file name. Only the uuid of the content node. I supose I need to obtain the file name with this uuid first.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My question is… how can I call this DownloadContentServlet inside the java webscript? With a httpclient get call inside my webscript? And how returns the response? Because a webscript have a WebScriptResponse. I put the response of the Servlet inside the webscript response? It still works with streaming?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Aug 2014 08:21:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291304#M244434</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-05T08:21:00Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291305#M244435</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;If you want to download content in share ,do it like this&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.Generate download url(I'll explain download url format later) ,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.Append your url to share proxy servlet.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If you want to download content in your own application ,I recommend you do it like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.Generate a download url using uuid,and when user click the url,the download request is sumbmitted to your proxy servlet .&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.In your proxy servlet ,get the uuid parameter and get user ticket from session(you should save alfresco ticket in session when user logged in),then send request to alfresco download url and download the content.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3.Send the content stream to user browser.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The download url to&amp;nbsp; DownloadContentServlet should be like this&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;/alfresco/download/attach/workspace/SpacesStore/uuid/filename?ticket=userticket &lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 05 Aug 2014 14:41:10 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291305#M244435</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-08-05T14:41:10Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291306#M244436</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;In my case, the users knows the url to download the content. Users are programmers than obtain with their applications this url with a java webscript response that I have implemented, when they upload a file. The response of this upload returns for example the uuid and the filename.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I try to download manually a file with the url:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;http://&amp;lt;Alfresco_IP&amp;gt;/alfresco/download/attach/workspace/SpacesStore/def199df-03e3-4b8e-993a-6fe1aae02733/test.pdf&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;This should be the ideal url that they can use to download, the problem is the ticket. They know the user and password of alfresco, but not the ticket, because they not logged in. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Solution 1. Are any url with "user" and "password" params instead of "ticket" param? Is the ideal.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Solution 2. Not use the url directly. I thank on a webscript to log in, obtain the ticket and call this url, but you recommend me a servlet better? For curiosity, why servlet are better option than a webscript? Is for the streaming with big files? I know webscripts, but I don't find examples with servlets. I don't know how it works. Where I put this servlet on alfresco and declare it to be open and users can call it? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again!&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Aug 2014 10:58:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291306#M244436</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-06T10:58:00Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291307#M244437</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I recommend DownloadContentServlet becuase it has the ability to stream large file directly to the response stream.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm afraid this url &lt;/SPAN&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt; http://&amp;lt;Alfresco_IP&amp;gt;/alfresco/download/attach/workspace/SpacesStore/def199df-03e3-4b8e-993a-6fe1aae02733/test.pdf&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;SPAN&gt; do not accept username and password parameter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If your custom webscript has streaming ability,you can just use it.I think it has same effect as DownloadContentServlet .&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Aug 2014 14:17:43 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291307#M244437</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-08-06T14:17:43Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291308#M244438</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Uf, maybe this is more complicated that I thank at first…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The main problem is… If I call by HttpClient in my custom webscript, how can I return the response? I can do this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;GetMethod method = new GetMethod(alfrescoServletDownloadUrlWithTicket);&lt;BR /&gt;method.setQueryString(ticketParameter);&lt;BR /&gt;HttpClient client = new HttpClient();&amp;nbsp; &lt;BR /&gt;int statusCode = client.executeMethod(method);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The webscript have a WebScriptResponse parameter on the execute, but how can I return the response of the executeMethod? People that call my webscript want the content in streaming on the response…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I supose that is more simple and efficient do this work on a custom servlet, not on a webscript. But I don't know how can I implement a servlet on alfresco, i can't find examples or tutorials to make a servlet on alfresco. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Please, you know where can I find an example to do this servlet? What I need? My custom servlet only will do: login, get the ticket and call to AlfrescoDownloadServlet to return the response in streaming.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Aug 2014 08:31:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291308#M244438</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-07T08:31:00Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291309#M244439</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;On question more… I read the DownloadContentServlet and BaseDownloadContentServlet code and I can see this: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;String range = req.getHeader(HEADER_CONTENT_RANGE);&lt;BR /&gt;(…)&lt;BR /&gt;HttpRangeProcessor rangeProcessor = new HttpRangeProcessor(contentService);&lt;BR /&gt;processedRange = rangeProcessor.processRange(res, reader, range.substring(6), nodeRef, propertyQName, mimetype, req.getHeader(HEADER_USER_AGENT));&lt;BR /&gt;(…)&lt;BR /&gt;if (processedRange == false) {&lt;BR /&gt; // return the complete entity range&lt;BR /&gt; long size = reader.getSize();&lt;BR /&gt; res.setHeader(HEADER_CONTENT_RANGE, "bytes 0-" + Long.toString(size-1L) + "/"+Long.toString(size));&lt;BR /&gt; res.setHeader(HEADER_CONTENT_LENGTH, Long.toString(size));&lt;BR /&gt; reader.getContent( res.getOutputStream() );&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I understand seeing this that if I want to download with streaming, I need to set the content-range on the header or the servlet give me all the content without streaming. It's all right? I need to specify the content-range when I call by HttpClient to the servlet to get the content with streaming? &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Aug 2014 09:21:58 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291309#M244439</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-08T09:21:58Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291310#M244440</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;BR /&gt;&lt;SPAN&gt;Yes，both server side and client side need to support byte ranges,you can refer to DownloadContentServlet on how to implemnt byte ranges on server side.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for client side,you should first test it whether server support byte ranges:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.If server dose not support byte ranges ,use common way.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.If server supports byte ranges ,add the "Range" header and Connection header field to&amp;nbsp; GET request and execute client request multi times&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;//send first reqeust get file length &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HttpClient httpClient = new HttpClient();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HeadMethod httpHead = new HeadMethod(url);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp; statusCode = httpClient.executeMethod(httpHead);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Header[] headers = httpHead.getResponseHeaders();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long contentLength = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( Header header:headers){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;header.getName().equalsIgnoreCase("Content-Length");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contentLength = Long.valueOf(header.getValue());&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;BR /&gt;then send multi request to download byte range stream&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GetMethod httpGet = new GetMethod(url);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long perRequestLength = 4096;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long startPosition = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (startPosition = 0; startPosition &amp;lt; contentLength; startPosition += perRequestLength) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;long endPosition = Math.min(4096, (int) contentLength - startPosition);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpGet.addRequestHeader("Connection", "Keep-Alive");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;httpGet.addRequestHeader("Range", "bytes=" + startPosition + "-"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ endPosition);&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Execute&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;statusCode= httpClient.executeMethod(httpGet);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InputStream inputStream = httpGet.getResponseBodyAsStream();&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// create ramdom acces file&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RandomAccessFile outputStream = new RandomAccessFile(file, "rw");&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputStream.seek(startPosition);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int count = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;byte[] buffer = new byte[1024];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((count = inputStream.read(buffer, 0, buffer.length)) &amp;gt; 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputStream.write(buffer, 0, count);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;outputStream.close();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 09 Aug 2014 03:34:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291310#M244440</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-08-09T03:34:00Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291311#M244441</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Yes,you can refer to&amp;nbsp; org.alfresco.web.app.servlet.DownloadContentServlet class and it's parent class.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 09 Aug 2014 03:38:08 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291311#M244441</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-08-09T03:38:08Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291312#M244442</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Oks!&amp;nbsp; Thank you very much!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Two things only about the code…&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;1. What is inputStream? I supose that each entity call add on inputStream empty variable the block that I read on each HttpPut. But how must I define it before? Doing this for example is ok?:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;ByteArrayInputStream inputStream = new ByteArrayInputStream(new byte[] {}); &lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then to the response of the Servlet, I do something like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="language-none line-numbers"&gt;&lt;CODE&gt;&lt;BR /&gt;OutputStream os = response.getOutputStream();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;try{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; byte[] buffer = new byte[4096];&lt;BR /&gt;&amp;nbsp;&amp;nbsp; int numRead;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; while( ( numRead = inputStream.read( buffer ) ) != -1 ){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.write( buffer, 0, numRead );&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}finally{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; try{ inputStream.close(); }catch ( Exception ex ){}&lt;BR /&gt;}&lt;BR /&gt;&lt;SPAN class="line-numbers-rows"&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;SPAN&gt;‍&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I imagine that doing this my servlet not have in memory all the alfresco file, and the streaming works. You see it ok?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;2. And for curiosity. If I obtain the content from alfresco, why HttpPut instead of HttpGet?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks again!&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 10 Aug 2014 15:24:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291312#M244442</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-10T15:24:00Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291313#M244443</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;You can use http get,I have already updated the sample code according apache common httpclient 3.x.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;It is still an example ,you should modify it according you requirment,for example using multi threads.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm sorry for my mistake.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 11 Aug 2014 08:31:00 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291313#M244443</guid>
      <dc:creator>kaynezhang</dc:creator>
      <dc:date>2014-08-11T08:31:00Z</dc:date>
    </item>
    <item>
      <title>Re: Download content by uuid with streaming</title>
      <link>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291314#M244444</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Thanks a lot! The code is perfect for me. I understand perfectly what I need and I'm sure it can help a lot of people. Thanks again! &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 11 Aug 2014 16:00:03 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-archive/download-content-by-uuid-with-streaming/m-p/291314#M244444</guid>
      <dc:creator>spilby</dc:creator>
      <dc:date>2014-08-11T16:00:03Z</dc:date>
    </item>
  </channel>
</rss>

