Super file upload
Dependency :
compile ":super-file-upload:0.4"
Summary
Description
Super File Upload Plugin
Overview
This plugin provides support for a file upload progress bar. It uses http://swfupload.org/ and also the jquery progress bar plugin http://t.wits.sg/misc/jQueryProgressBar/demo.phpAuthor: Peter Delahunty
blog: http://blog.peterdelahunty.com
twitter: http://twitter.com/peterdelahunty
email: peter.delahunty@solution51.com
Compatibility
The plugin is currently compatible with version 1.1.x of grails.Installation
Installation is very simple as is all grails plugin installations;grails install-plugin super-file-uploadDocumentation
Usage of the super file upload plugin is very simple. All you need to do is add the following gsp tags within your page.Head setup grails tag :
This generates the javascript. It has lots of parameter i will discuss below. Here is a simple tag. You MUST put this tag in your head element on your html page.<sfu:generateConfiguration fileSize="30" form="bookForm" buttonImageFile="/buttons/browse-button-sprite.png" buttonWidth="104" buttonHeight="30"/>
File upload control grails tag
Drop this where you want the file upload control to be rendered<sfu:fileUploadControl/>
Progress bar grails tag
Drop this where you want the progress bar to be rendered<sfu:fileUploadProgressBar/>
IMPORTANT html Form element onsubmit attribute
You must also supply the onsubmit attribute on the form. This must call the sfuSubmitForm function. Just copy the example above. If you don't do this then nothing will work :)<form id="bookForm" name="bookForm" onsubmit="return sfuSubmitForm(this);">
Full example of a gsp page with a form.
This assumes you have a button image at the url /buttons/browse-button-sprite.png. See more info about the button below.<html>
<head>
<title>Simple form test</title>
<sfu:generateConfiguration fileSize="30" form="bookForm" buttonImageFile="/buttons/browse-button-sprite.png" buttonWidth="104" buttonHeight="30"/>
</head>
<body><form id="bookForm" name="bookForm" action="save" onsubmit="return sfuSubmitForm(this);"> Choose file: <sfu:fileUploadControl/>
<br/>
Progress bar: <sfu:fileUploadProgressBar/>
<br/> <input type="submit" value="Save">
</form></body>
</html>How to handle in your controller
You need to look out for a parameter call uploadedFileIdclass DemoController { SuperFileUploadService superFileUploadService def save = { String uploadFilename = params.uploadedFileId if (uploadFilename) {
// get the full path name of the file from the temp directory
File file = superFileUploadService.getTempUploadFile(uploadFilename) }else{
// file was not uploaded by flash. User might have javascript off
def fileStream = request.getFile('sfuFile');
// handle normal file upload as per grails docs
} redirect(action:'confirm)
}}sfu:generateConfiguration Attributes
form:(required)
This is the name of the form you want to submit after the file upload has completed. It is the id of the form.controller(optional)
This the name of the controller that you want to call to handle the file upload. All calls default to /sfuReciever/handleFlashUpload if you do not specifycontroller(optional)
This the name of the action that you want to call to handle the file upload. All calls default to /sfuReciever/handleFlashUpload if you do not specifyfileSize(optional)
This is the fileSize limit in MB of the file being uploaded. It defaults to 10MB. An alert message is thrown if it bigger than this limitparamName(optional)
This is the http parameter name of file data being uploaded. It is default to 'sfuFile'. Note if you change this you must all change the name on the fileUploadControl tag.buttonImageDir(optional)
This is the base directory of where button image sprite image lives. It defaults to imagesbuttonImageFile(optional)
This is the name of button image sprite image. See below about the rules for the button imagebuttonWidth(optional)
The width of the buttonbuttonHeight(optional)
The height of the buttonprogressBarBoxImg(optional)
The outer box image for the progess barprogressBarImg(optional)
The progress bar imageprogressBarHeight(optional)
The progress bar image heightprogressBarWidth(optional)
The progress bar image widthuseEmbeddedJquery(optional)
Use this and set to false if you use your own version of jquery already on the page. Otherwise to do use itcssClass:(optional)
This is the css class for the text box. You can put as many as you like separated by a space.sfu:fileUploadControl Attributes
paramName:(optional)
This is the http parameter name of file data being uploaded. It is default to 'sfuFile'. Note if you change this you must all change the paramName on the generateConfiguration tag.sfu:fileUploadProgressBar Attributes
cssClass:(optional)
This is the css class for the progress bar. You can put as many as you like separated by a space.Super file upload configuration
You have two configuraiton options that you specify in the config.groovy of your project.sfu.tempUploadDirectory
This the place where you want the uploaded file to be saved. example sfu.tempUploadDirectory = "c:/swf_temp"sfu.paramName
This is the http parameter name of file data being uploaded. It is default to 'sfuFile'. Note if you change this you must all change the paramName on the generateConfiguration tag and the fileUploadControl tagh2 Image button rules Your image button must be an image sprite and contain 4 variations of the button: normal, hover, click, disabledJust like this:
Graceful degredation
This plugin supports Graceful degredation. So if the user does not have javascript enabled or flash support then it just default to the normal file upload control.Screen shots
Here is a screen shot from my web site using this plugin. http://www.ebookstamper.comWith the flash control rendered
With Progress bar
Falling back to normal file upload because javascript is disabled.