Created
September 19, 2012 14:37
-
-
Save loictalbot/3750025 to your computer and use it in GitHub Desktop.
Multiple file upload using Jquery + Spring MVC
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> | |
<html lang="en"> | |
<head> | |
<!-- Force latest IE rendering engine or ChromeFrame if installed --> | |
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]--> | |
<meta charset="utf-8"> | |
<title>jQuery File Upload Demo</title> | |
<meta name="description" content="File Upload widget with multiple file selection, drag&drop support, progress bar and preview images for jQuery. Supports cross-domain, chunked and resumable file uploads. Works with any server-side platform (Google App Engine, PHP, Python, Ruby on Rails, Java, etc.) that supports standard HTML form file uploads."> | |
<meta name="viewport" content="width=device-width"> | |
<!-- Bootstrap CSS Toolkit styles --> | |
<link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap.min.css"> | |
<!-- Generic page styles --> | |
<link rel="stylesheet" href="css/style.css"> | |
<!-- Bootstrap styles for responsive website layout, supporting different screen sizes --> | |
<link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap-responsive.min.css"> | |
<!-- Bootstrap CSS fixes for IE6 --> | |
<!--[if lt IE 7]><link rel="stylesheet" href="http://blueimp.github.com/cdn/css/bootstrap-ie6.min.css"><![endif]--> | |
<!-- Bootstrap Image Gallery styles --> | |
<link rel="stylesheet" href="http://blueimp.github.com/Bootstrap-Image-Gallery/css/bootstrap-image-gallery.min.css"> | |
<!-- CSS to style the file input field as button and adjust the Bootstrap progress bars --> | |
<link rel="stylesheet" href="css/jquery.fileupload-ui.css"> | |
<!-- Shim to make HTML5 elements usable in older Internet Explorer versions --> | |
<!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]--> | |
</head> | |
<body> | |
<div class="navbar navbar-fixed-top"> | |
<div class="navbar-inner"> | |
<div class="container"> | |
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> | |
<span class="icon-bar"></span> | |
<span class="icon-bar"></span> | |
<span class="icon-bar"></span> | |
</a> | |
<a class="brand" href="https://github.com/blueimp/jQuery-File-Upload">jQuery File Upload</a> | |
<div class="nav-collapse"> | |
<ul class="nav"> | |
<li class="active"><a href="#">Demo</a></li> | |
<li><a href="https://github.com/blueimp/jQuery-File-Upload/downloads">Downloads</a></li> | |
<li><a href="https://github.com/blueimp/jQuery-File-Upload">Source Code</a></li> | |
<li><a href="https://github.com/blueimp/jQuery-File-Upload/wiki">Documentation</a></li> | |
<li><a href="https://github.com/blueimp/jQuery-File-Upload#support">Support</a></li> | |
<li><a href="https://blueimp.net">© Sebastian Tschan</a></li> | |
</ul> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="container"> | |
<div class="page-header"> | |
<h1>jQuery File Upload Demo</h1> | |
</div> | |
<blockquote> | |
<p>File Upload widget with multiple file selection, drag&drop support, progress bars and preview images for jQuery.<br> | |
Supports cross-domain, chunked and resumable file uploads and client-side image resizing.<br> | |
Works with any server-side platform (PHP, Python, Ruby on Rails, Java, Node.js, Go etc.) that supports standard HTML form file uploads.</p> | |
</blockquote> | |
<br> | |
<!-- The file upload form used as target for the file upload widget --> | |
<form id="fileupload" action="mfileupload" method="POST" enctype="multipart/form-data"> | |
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload --> | |
<div class="row fileupload-buttonbar"> | |
<div class="span7"> | |
<!-- The fileinput-button span is used to style the file input field as button --> | |
<span class="btn btn-success fileinput-button"> | |
<i class="icon-plus icon-white"></i> | |
<span>Add files...</span> | |
<input type="file" name="files" multiple> | |
</span> | |
<button type="submit" class="btn btn-primary start"> | |
<i class="icon-upload icon-white"></i> | |
<span>Start upload</span> | |
</button> | |
<button type="reset" class="btn btn-warning cancel"> | |
<i class="icon-ban-circle icon-white"></i> | |
<span>Cancel upload</span> | |
</button> | |
<button type="button" class="btn btn-danger delete"> | |
<i class="icon-trash icon-white"></i> | |
<span>Delete</span> | |
</button> | |
<input type="checkbox" class="toggle"> | |
</div> | |
<!-- The global progress information --> | |
<div class="span5 fileupload-progress fade"> | |
<!-- The global progress bar --> | |
<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100"> | |
<div class="bar" style="width:0%;"></div> | |
</div> | |
<!-- The extended global progress information --> | |
<div class="progress-extended"> </div> | |
</div> | |
</div> | |
<!-- The loading indicator is shown during file processing --> | |
<div class="fileupload-loading"></div> | |
<br> | |
<!-- The table listing the files available for upload/download --> | |
<table role="presentation" class="table table-striped"><tbody class="files" data-toggle="modal-gallery" data-target="#modal-gallery"></tbody></table> | |
</form> | |
<br> | |
<div class="well"> | |
<h3>Demo Notes</h3> | |
<ul> | |
<li>The maximum file size for uploads in this demo is <strong>5 MB</strong> (default file size is unlimited).</li> | |
<li>Only image files (<strong>JPG, GIF, PNG</strong>) are allowed in this demo (by default there is no file type restriction).</li> | |
<li>Uploaded files will be deleted automatically after <strong>5 minutes</strong> (demo setting).</li> | |
<li>You can <strong>drag & drop</strong> files from your desktop on this webpage with Google Chrome, Mozilla Firefox and Apple Safari.</li> | |
<li>Please refer to the <a href="https://github.com/blueimp/jQuery-File-Upload">project website</a> and <a href="https://github.com/blueimp/jQuery-File-Upload/wiki">documentation</a> for more information.</li> | |
<li>Built with Twitter's <a href="http://twitter.github.com/bootstrap/">Bootstrap</a> toolkit and Icons from <a href="http://glyphicons.com/">Glyphicons</a>.</li> | |
</ul> | |
</div> | |
</div> | |
<!-- modal-gallery is the modal dialog used for the image gallery --> | |
<div id="modal-gallery" class="modal modal-gallery hide fade" data-filter=":odd"> | |
<div class="modal-header"> | |
<a class="close" data-dismiss="modal">×</a> | |
<h3 class="modal-title"></h3> | |
</div> | |
<div class="modal-body"><div class="modal-image"></div></div> | |
<div class="modal-footer"> | |
<a class="btn modal-download" target="_blank"> | |
<i class="icon-download"></i> | |
<span>Download</span> | |
</a> | |
<a class="btn btn-success modal-play modal-slideshow" data-slideshow="5000"> | |
<i class="icon-play icon-white"></i> | |
<span>Slideshow</span> | |
</a> | |
<a class="btn btn-info modal-prev"> | |
<i class="icon-arrow-left icon-white"></i> | |
<span>Previous</span> | |
</a> | |
<a class="btn btn-primary modal-next"> | |
<span>Next</span> | |
<i class="icon-arrow-right icon-white"></i> | |
</a> | |
</div> | |
</div> | |
<!-- The template to display files available for upload --> | |
<script id="template-upload" type="text/x-tmpl"> | |
{% for (var i=0, file; file=o.files[i]; i++) { %} | |
<tr class="template-upload fade"> | |
<td class="preview"><span class="fade"></span></td> | |
<td class="name"><span>{%=file.name%}</span></td> | |
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td> | |
{% if (file.error) { %} | |
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td> | |
{% } else if (o.files.valid && !i) { %} | |
<td> | |
<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="bar" style="width:0%;"></div></div> | |
</td> | |
<td class="start">{% if (!o.options.autoUpload) { %} | |
<button class="btn btn-primary"> | |
<i class="icon-upload icon-white"></i> | |
<span>{%=locale.fileupload.start%}</span> | |
</button> | |
{% } %}</td> | |
{% } else { %} | |
<td colspan="2"></td> | |
{% } %} | |
<td class="cancel">{% if (!i) { %} | |
<button class="btn btn-warning"> | |
<i class="icon-ban-circle icon-white"></i> | |
<span>{%=locale.fileupload.cancel%}</span> | |
</button> | |
{% } %}</td> | |
</tr> | |
{% } %} | |
</script> | |
<!-- The template to display files available for download --> | |
<script id="template-download" type="text/x-tmpl"> | |
{% for (var i=0, file; file=o.files[i]; i++) { %} | |
<tr class="template-download fade"> | |
{% if (file.error) { %} | |
<td></td> | |
<td class="name"><span>{%=file.name%}</span></td> | |
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td> | |
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td> | |
{% } else { %} | |
<td class="preview">{% if (file.thumbnail_url) { %} | |
<a href="{%=file.url%}" title="{%=file.name%}" rel="gallery" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a> | |
{% } %}</td> | |
<td class="name"> | |
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'gallery'%}" download="{%=file.name%}">{%=file.name%}</a> | |
</td> | |
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td> | |
<td colspan="2"></td> | |
{% } %} | |
<td class="delete"> | |
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}"> | |
<i class="icon-trash icon-white"></i> | |
<span>{%=locale.fileupload.destroy%}</span> | |
</button> | |
<input type="checkbox" name="delete" value="1"> | |
</td> | |
</tr> | |
{% } %} | |
</script> | |
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> | |
<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included --> | |
<script src="js/vendor/jquery.ui.widget.js"></script> | |
<!-- The Templates plugin is included to render the upload/download listings --> | |
<script src="http://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script> | |
<!-- The Load Image plugin is included for the preview images and image resizing functionality --> | |
<script src="http://blueimp.github.com/JavaScript-Load-Image/load-image.min.js"></script> | |
<!-- The Canvas to Blob plugin is included for image resizing functionality --> | |
<script src="http://blueimp.github.com/JavaScript-Canvas-to-Blob/canvas-to-blob.min.js"></script> | |
<!-- Bootstrap JS and Bootstrap Image Gallery are not required, but included for the demo --> | |
<script src="http://blueimp.github.com/cdn/js/bootstrap.min.js"></script> | |
<script src="http://blueimp.github.com/Bootstrap-Image-Gallery/js/bootstrap-image-gallery.min.js"></script> | |
<!-- The Iframe Transport is required for browsers without support for XHR file uploads --> | |
<script src="js/jquery.iframe-transport.js"></script> | |
<!-- The basic File Upload plugin --> | |
<script src="js/jquery.fileupload.js"></script> | |
<!-- The File Upload file processing plugin --> | |
<script src="js/jquery.fileupload-fp.js"></script> | |
<!-- The File Upload user interface plugin --> | |
<script src="js/jquery.fileupload-ui.js"></script> | |
<!-- The localization script --> | |
<script src="js/locale.js"></script> | |
<!-- The main application script --> | |
<script src="js/main.js"></script> | |
<!-- The XDomainRequest Transport is included for cross-domain file deletion for IE8+ --> | |
<!--[if gte IE 8]><script src="js/cors/jquery.xdr-transport.js"></script><![endif]--> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package org.springframework.samples.mvc.fileupload; | |
import java.io.IOException; | |
import org.springframework.mvc.extensions.ajax.AjaxUtils; | |
import org.springframework.stereotype.Controller; | |
import org.springframework.ui.Model; | |
import org.springframework.web.bind.annotation.ModelAttribute; | |
import org.springframework.web.bind.annotation.RequestMapping; | |
import org.springframework.web.bind.annotation.RequestMethod; | |
import org.springframework.web.bind.annotation.RequestParam; | |
import org.springframework.web.context.request.WebRequest; | |
import org.springframework.web.multipart.MultipartFile; | |
@Controller | |
@RequestMapping("/mfileupload") | |
public class MFileUploadController { | |
@ModelAttribute | |
public void ajaxAttribute(WebRequest request, Model model) { | |
model.addAttribute("ajaxRequest", AjaxUtils.isAjaxRequest(request)); | |
} | |
@RequestMapping(method=RequestMethod.GET) | |
public void fileUploadForm() { | |
} | |
@RequestMapping(method=RequestMethod.POST) | |
public void processUpload(@RequestParam MultipartFile[] files, Model model) throws IOException { | |
for (MultipartFile f:files) { | |
model.addAttribute("message", "File '" + f.getOriginalFilename() + "' uploaded successfully"); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Can you please send me the WAR or Zip file for this? I was unable to clone or download it onto Windows machine.