Ajax Upload; A file upload script with progress-bar, drag-and-drop
2012-04-09 16:52
429 查看
An older ajax upload plugin, which only used iframe for uploads, and was licensed under MIT license is located on
github.
This plugin uses XHR for uploading multiple files with progress-bar in FF3.6+, Safari4+, Chrome and falls back to hidden iframe based upload in other browsers, providing good user experience everywhere.
Drop files here to upload
Upload a file
Download
drag-and-drop file select in FF, Chrome
uploads are cancellable
no external dependencies
doesn't use Flash
fully working with https
keyboard support in FF, Chrome, Safari
tested in IE7,8; Firefox 3,3.6,4; Safari4,5; Chrome; Opera10.60;
GNU GPL and GNU LGPL 2 or later. If these licenses don't suit you, mail me at andrew (at) valums.com.
Please
donate if you are willing to support the further development of file upload plugin.
If you want to customize uploader, by using a different looking file list or change the behaviour or functionality use qq.FileUploaderBasic.
The difference between them is that qq.FileUploader provides a list of files, drag-and-drop, but qq.FileUploaderBasic only creates button and handles validation. Basic uploader is easier extendable, and doesn't limit possible customization.
qq.FileUploader extends qq.FileUploaderBasic, so that all the options present in the basic uploader also exist in the full widget.
Initialize uploader when the DOM is ready. Change the action option. For example ../server/php.php for the default folder structure. In the server folder you will find examples for different platforms. If you can't find the one you need, check the readme.txt
in the same folder.
Instance methods
setParams(newParams)
To change params based on the state of your app, use
It can be nicely used in onSubmit callback.
If the upload doesn't complete, saying failed.
Set the debug option of the FileUploader to true.
Open the page where you have a FileUploader.
Open developer console in your browser.
Try to upload the file. You should see a server serponse.
It should be {success:true} for completed requests. If it's not, then you have a problem with your server-side script.
John Yeary
Sidney Maestre
Patrick Pfeiffer
Sean Sandy (SeanJA)
Andy Newby
Ivan Valles
github.
This plugin uses XHR for uploading multiple files with progress-bar in FF3.6+, Safari4+, Chrome and falls back to hidden iframe based upload in other browsers, providing good user experience everywhere.
Demo
To upload a file, click on the button below. Drag-and-drop is supported in FF, Chrome. Progress-bar is supported in FF3.6+, Chrome6+, Safari4+Drop files here to upload
Upload a file
Download
Donate GitHub repo
Features
multiple file select, progress-bar in FF, Chrome, Safaridrag-and-drop file select in FF, Chrome
uploads are cancellable
no external dependencies
doesn't use Flash
fully working with https
keyboard support in FF, Chrome, Safari
tested in IE7,8; Firefox 3,3.6,4; Safari4,5; Chrome; Opera10.60;
License
This plugin is open sourced underGNU GPL and GNU LGPL 2 or later. If these licenses don't suit you, mail me at andrew (at) valums.com.
Please
donate if you are willing to support the further development of file upload plugin.
Known Issues
Plugin breaks back button functionality in Opera.Getting started
The fileuploader.js contains two classes that are meant to be used directly. If you need a complete upload widget (from demo) to quickly drop into your current design, use qq.FileUploader.If you want to customize uploader, by using a different looking file list or change the behaviour or functionality use qq.FileUploaderBasic.
The difference between them is that qq.FileUploader provides a list of files, drag-and-drop, but qq.FileUploaderBasic only creates button and handles validation. Basic uploader is easier extendable, and doesn't limit possible customization.
qq.FileUploader extends qq.FileUploaderBasic, so that all the options present in the basic uploader also exist in the full widget.
qq.FileUploader - Setting up full upload widget
Include fileuploader.js and fileuploader.css into your page. Create container element.<div id="file-uploader"> <noscript> <p>Please enable JavaScript to use file uploader.</p> <!-- or put a simple form for upload here --> </noscript> </div>
Initialize uploader when the DOM is ready. Change the action option. For example ../server/php.php for the default folder structure. In the server folder you will find examples for different platforms. If you can't find the one you need, check the readme.txt
in the same folder.
var uploader = new qq.FileUploader({ // pass the dom node (ex. $(selector)[0] for jQuery users) element: document.getElementById('file-uploader'), // path to server-side upload script action: '/server/upload' });
Options of both classes
// url of the server-side upload script, should be on the same domain action: '/server/upload', // additional data to send, name-value pairs params: {}, // validation // ex. ['jpg', 'jpeg', 'png', 'gif'] or [] allowedExtensions: [], // each file size limit in bytes // this option isn't supported in all browsers sizeLimit: 0, // max size minSizeLimit: 0, // min size // set to true to output server response to console debug: false, // events // you can return false to abort submit onSubmit: function(id, fileName){}, onProgress: function(id, fileName, loaded, total){}, onComplete: function(id, fileName, responseJSON){}, onCancel: function(id, fileName){}, messages: { // error messages, see qq.FileUploaderBasic for content }, showMessage: function(message){ alert(message); }
Instance methods
setParams(newParams)
Changing alert/messages to something more user friendly
If you limited file types and max size, you will probably want to change the default alert and messages as you see fit, this is possible using showMessage callback and messages option.Sending additional params
To add a parameter that will be passed as a query string with each upload use params option.var uploader = new qq.FileUploader({ element: document.getElementById('file-uploader'), action: '/server-side.upload', // additional data to send, name-value pairs params: { param1: 'value1', param2: 'value2' } });
To change params based on the state of your app, use
uploader.setParams({ anotherParam: 'value' });
It can be nicely used in onSubmit callback.
Troubleshooting
If you can't get the uploader to work, please try the following steps before asking for help.If the upload doesn't complete, saying failed.
Set the debug option of the FileUploader to true.
Open the page where you have a FileUploader.
Open developer console in your browser.
Try to upload the file. You should see a server serponse.
It should be {success:true} for completed requests. If it's not, then you have a problem with your server-side script.
Contributors
Thanks to everybody who contributed, either by sending bug reports or donating. And special thanks to:John Yeary
Sidney Maestre
Patrick Pfeiffer
Sean Sandy (SeanJA)
Andy Newby
Ivan Valles
相关文章推荐
- File Upload Manager and Server Side File Upload Progress Bar
- html 5 drag and drop upload file
- ASP.NET File Upload with *Real-Time* Progress Bar
- ASP.NET File Upload with Progress Bar
- XHtmlTree - Tree control with support for HTML, XML, Smart Checkboxes, and Drag & Drop
- Html5 File Upload with Progress
- Custom Client Side Drag and Drop Behavior in ASP.NET AJAX
- slickUpload (Progress Bar for Uploading file)
- ASP.NET Ajax Drag and Drop Table Columns Extender Control/拖拽表列
- [jQuery]Drag And Drop Everything With 30 Handy jQuery Plugins
- [Javascript + rxjs] Simple drag and drop with Observables
- Work with a file upload and download controls
- ASP.NET AJAX Drag And Drop
- Work with a file upload and download controls2
- Server Side File Upload Progress Bar
- Ajax Upload; A file upload script with progress-bar, drag-and-drop.
- Create a Drag and Drop Puzzle in ActionScript 3.0
- Move ListBox Items with the Mouse (Drag and Drop
- Drag and drop with Javascript
- ASP.NET Ajax Drag and Drop Table Columns Extender Control/拖拽表列