Dropupload"

From Documentation
Line 9: Line 9:
  
 
= Employment/Purpose =
 
= Employment/Purpose =
<code>Dropupload</code> use HTML5 tecnnology, can handle action user drag file in it, and upload them to server. The behavior of <code>Dropupload</code> look like traditional ZK file upload, but can provide better user experience.
+
<tt>Dropupload</tt> leverages HTML 5 technology to handle file uploading where users can simply drag and drop the file(s) they want to upload into <tt>Dropupload</tt> and the uploading process will start automatically. The behaviour and operation of this <tt>Dropupload</tt> component is similar to ZK's [http://books.zkoss.org/wiki/ZK_Component_Reference/Essential_Components/Button#File_Upload '''file upload button'''] but with better user experience and performance.
  
 
= Example =
 
= Example =

Revision as of 06:57, 5 July 2012

Dropupload

Employment/Purpose

Dropupload leverages HTML 5 technology to handle file uploading where users can simply drag and drop the file(s) they want to upload into Dropupload and the uploading process will start automatically. The behaviour and operation of this Dropupload component is similar to ZK's file upload button but with better user experience and performance.

Example

	<dropupload maxsize="5120" detection="none" onUpload="doSomething(event)">
		<attribute name="content"><![CDATA[
			<b>Drop Here</b><br/>
			size < 5MB
		]]></attribute>
	</dropupload>

Maxsize

The attribute maxsize will limit the file size user want to upload. Notice if user drop two or more files in Dropupload, all of these file size must smaller than maxsize setting, or will show error message and won't upload anything.

The unit of maxsize is KB. Negative value means unlimited. If developer does not assign maxsize value, it will assign the value of Configuration.getMaxUploadSize() automatically.

Detection

To collate "Drag and Drop" behavior, we are indroducing attribute detection. By set this attribute, when user are dragging in your application, Dropupload or it's content will show.

There are four valid value of detection :

  • none : Ignore drag action, always show Dropupload and content.
  • browser (default) : Dropupload does not show initially. When user dragging into browser, both Dropupload and content will be shown.
  • self : It will show Dropupload initially. When user dragging into Dropupload, the content will be shown.
  • id of other component : It's almost the same of self, but the trigger area is the component of appointed id.

The content value can be any HTML string, remember surround content value by CDATA block .

Notice : The Dropupload with detection="browser" setting can't put together with other Dropupload that detection is not "browser". If do so, the user can't drop file on it.

Customized File Viewer

Like traditional File Upload, it will show progress when uploading file.

DefaultFileUploadVeiwer.JPG

Developer can design customized File Viewer. First implement a JAvaScript class handling the desplay of the uploading files. There is an example :

foo.MyFileViewer = zk.$extends(zk.Object, {
	updated: null,
	$init: function (uplder,  file) {
		this._uplder = uplder;
		var id = uplder.id,
			uri = zk.ajaxURI('/web/zk/img/progress2.gif', {au:true}),
			html = '<div id="' + id + '" class="viewer"><image class="float-left" src="' + uri + '"/>'
			+ '<div class="float-left">FileName: ' + file.name
			+ ' <a id="' + id + '-cancel">Cancel</a></div><div class="float-right">'
			+ msgzk.FILE_SIZE + ': <span id="' + id + '-sent">0</span> of '
			+ '<span id="' + id + '-total">0</span></div><div class="clear"></div></div>';
				
		jq(uplder.getWidget().getPage()).append(html);
			
		this.viewer = jq('#'+ id)[0];
		jq('#' + id + '-cancel').click(function() {
			uplder.cancel();
		});
	},
	update: function (sent, total) {
		jq('#'+ this._uplder.id + '-sent').html(Math.round(sent/1000) + msgzk.KBYTES);
		if (!this.updated) {
			this.updated = true;
			jq('#'+ this._uplder.id + '-total').html(Math.round(total/1024)+msgzk.KBYTES);
		}
	},
	destroy: function () {
		jq(this.viewer).remove();
	}
});

There are three functions above, $init, update, and destroy.

  1. $init(uplder, file): When a user selects a file from file chooser, the function will be invoked.
  2. update(send, total): After the uploading engine receives the uploaded size, the function will be invoked.
    • sent: An integer of the uploaded size.
    • total: An integer of the total uploaded size.
  3. destroy(): After the uploaded file is done or a user cancels the uploading file or the uploading file causes an error, the function will be invoked.

After finish foo.MyFileViewer, specify the JavaScript class in the viewerClass attribute.

<dropupload viewClass="foo.MyFileViewer" content="custom viewer" detection="none" />

Uploader

Here is a description table of the Uploader when passed a user selected a file.

Method Usage
getWidget Returns the widget that it belongs to.
cancel Stops the uploading process.

Transforming the original File Viewer

Customized File Viewers written in the past can continued to be used, only with the need to make some slight changes :

  • The second parameter of $init() changes from the original filenm (type: String) into a file (type: File) object. Add filenm = file.name to solve it.
  • The first parameter of update(), send would originally pass an integer value in a range from 0 to 100, representing the percentage of the uploading process. Now it will pass the amount of the already uploaded amount of data (Bytes).

After Upload Finish

The uploaded files can be retrieved from the companion event, which is an instance of UploadEvent. For example,

<zscript><![CDATA[
public void showFileName(org.zkoss.zk.ui.event.UploadEvent event){
	org.zkoss.util.media.Media[] medias = event.getMedias();
	StringBuffer sb = new StringBuffer();
	for (org.zkoss.util.media.Media m : medias) {
		sb.append(m.getName()+"\n");
	}
	Messagebox.show(sb.toString());
}
]]></zscript>
<dropupload detection="none" onUpload="showFileName(event)" />

Browser Support

As Dropupload uses HTML5 technology, there are several browsers that does not support it. Currently it operates normally on Firefox (v.13), Chrome (v.19) and Safari (v.5.1.x), but IE9, Opera v.11.x cannot use this function.

Moreover, the detection setting cannot be displayed on some older machines.

Supported Events

Name
Event Type
onUpload
Event: UploadEvent

Denotes user has uploaded a file to the component

Supported Children

*NONE

Use Cases

Version Description Example Location
     

Version History

Last Update : 2012/07/05


Version Date Content
6.1.0 June, 2012 Dropupload was introduced.



Last Update : 2012/07/05

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.