Difference between revisions of "File Download"

From Documentation
(Created page with '{{ZKDevelopersGuidePageHeader}} == The File Download Dialog == The <tt>org.zkoss.zul.Filedownload</tt> class provides a set of utilities to prompt a user for downloading a file …')
 
 
Line 1: Line 1:
{{ZKDevelopersGuidePageHeader}}
+
#REDIRECT [[ZK_Component_Reference/Essential_Components/Filedownload]]
 
 
== The File Download Dialog ==
 
The <tt>org.zkoss.zul.Filedownload</tt> class provides a set of utilities to prompt a user for downloading a file from the server to the client. Unlike the <tt>iframe</tt> component that displays the file in the browser window, a file download dialog is shown at the browser if one of the <tt>save</tt> methods is called. Then, the user can specify the location in his local file system to save the file.
 
 
 
[[Image:10000000000002AF000001BB582C2DD7.png]]
 
 
<source lang="xml" >
 
<button label="Download download.html">
 
<attribute name="onClick">{
 
java.io.InputStream is = desktop.getWebApp().getResourceAsStream("/test/download.html");
 
if (is != null)
 
Filedownload.save(is, "text/html", "download.html");
 
else
 
alert("/test/download.html not found");
 
}
 
</attribute>
 
</button>
 
</source>
 
 
 
== The Resumable Download ==
 
 
 
In certain situations, you might prefer to generate an URL that can be used even if the desktop becomes invalid. For example, you want to allow users to use a download manager (such as <code>wget</code> and <code>DownThemAll</code>). Another example is related to the blocking feature found in some browsers -- which confirm the download with the user and causes the page to reload (and then the previous desktop is lost).
 
 
 
To solve this, you have to use the so-called resumable download. By resumable we mean the user can bookmark the URL and download it later (and even resume the download in the middle). On the other hand, the download URL of the <code>save</code> method becomes obsolete as soon as the desktop (or session) is gone.
 
 
 
To use resumable download, you have to invoke the <code>saveResumable</code> method of the <code>org.zkoss.zkmax.zul.Filedownload</code> class (available in the Enterprise edition) instead of <code>save</code> as depicted below:
 
 
 
<source lang="xml">
 
<window title="Save Resumable" border="normal">
 
<button label="download"
 
onClick='Filedownload.saveResumable("foo.txt", "text/plain", null)'/>
 
</window>
 
</source>
 
 
 
Then, the URL generated by <code>saveResumable</code> can be copied to the download manager the user prefers.
 
 
 
=== Control Resumable Download ===
 
Since the resumable download can be used in any session or without any session, or with a different client (such flashget), you might want to limit the download under certain condition. There are two library properties that can control the number of allowed resumable downloads.
 
 
 
* <code>org.zkoss.zk.download.resumable.lifetime</code>
 
** Specifies when the download URL will be expired (unit: second).
 
** Default: 14400 (i.e., 4 hours).</dd>
 
* <code>org.zkoss.zk.download.resumable.maxsize</code>
 
** <dd>Specifies the maximal allowed number of resumable downloads.
 
(( Default: 4096.
 
 
 
If you want more advanced control, you can implement {@link FiledownloadListener} and specify it in a library property called <code>org.zkoss.zkmax.zul.FiledownloadListener.class</code>. For examle, in <code>zk.xml</code>, you can do:
 
 
 
<source lang="javascript">
 
<library-property>
 
  <name>org.zkoss.zkmax.zul.FiledownloadListener.class</name>
 
  <value>com.foo.MyDownloadListener</value>
 
</library-property>
 
</source>
 
 
 
{{ ZKDevelopersGuidePageFooter}}
 

Latest revision as of 03:42, 2 October 2014