Uploading multiple files in one go without zipping them up, can be achieved using the following two obvious solutions :

Let's see the second solution while using Stripes with SWFUpload.

Eclipse in this case is the IDE. The object of this guide not being to go into any details of Eclipse, I consider the reader to be familiar with said IDE.

The Maven2 plugin is used with Eclipse.

Creation of the pom.xml

 
<?xml version="1.0" encoding="UTF-8"?> 

<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

<modelVersion>4.0.0</modelVersion> 
<groupId>com.fullsix</groupId> 
<artifactId>demo</artifactId> 
<packaging>war</packaging> 
<name /> 
<version>0.0.1-SNAPSHOT</version> 
<description /> 
<build> 
<finalName>demo</finalName> 
<plugins> 
<plugin> 
<artifactId>maven-compiler-plugin</artifactId> 
<configuration> 
<source>1.5</source> 
<target>1.5</target> 
<encoding>UTF-8</encoding> 
</configuration> 
</plugin> 
<plugin> 
<groupId>org.mortbay.jetty</groupId> 
<artifactId>maven-jetty-plugin</artifactId> 
<configuration> 
<contextPath>/</contextPath> 
<connectors> 
<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
<port>8080</port> 
</connector> 
</connectors> 
</configuration> 
</plugin> 
</plugins> 
</build> 
<dependencies> 
<dependency> 
<groupId>commons-fileupload</groupId> 
<artifactId>commons-fileupload</artifactId> 
<version>1.2.1</version> 
</dependency> 
<dependency> 
<groupId>commons-io</groupId> 
<artifactId>commons-io</artifactId> 
<version>1.4</version> 
</dependency> 
<dependency> 
<groupId>commons-logging</groupId> 
<artifactId>commons-logging</artifactId> 
<version>1.1.1</version> 
</dependency> 
<dependency> 
<groupId>net.sourceforge.stripes</groupId> 
<artifactId>stripes</artifactId> 
<version>1.4.3</version> 
</dependency> 
<dependency> 
<groupId>javax.servlet</groupId> 
<artifactId>servlet-api</artifactId> 
<version>2.5</version> 
</dependency> 
<dependency> 
<groupId>commons-lang</groupId> 
<artifactId>commons-lang</artifactId> 
<version>2.4</version> 
</dependency> 
</dependencies> 
</project> 

The web.xml

Note: we're using the net.sourceforge.stripes.controller.multipart.CommonsMultipartWrapper

 
<?xml version="1.0" encoding="ISO-8859-1" ?> 

<web-app id="Communautaire_Front" version="2.4" 
xmlns="http://java.sun.com/xml/ns/j2ee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 

<display-name>SWF Upload</display-name> 

<filter> 
<display-name>Stripes Filter</display-name> 
<filter-name>StripesFilter</filter-name> 
<filter-class>net.sourceforge.stripes.controller.StripesFilter</filter-class> 
<init-param> 
<param-name>ActionResolver.UrlFilters</param-name> 
<param-value>classes</param-value> 
</init-param> 
<init-param> 
<param-name>ActionResolver.PackageFilters</param-name> 
<param-value>com.fullsix.demo.action.*</param-value> 
</init-param> 
<init-param> 
<param-name>MultipartWrapper.Class</param-name> 
<param-value>net.sourceforge.stripes.controller.multipart.CommonsMultipartWrapper</param-value> 
</init-param> 
<init-param> 
<param-name>FileUpload.MaximumPostSize</param-name> 
<param-value>500m</param-value> 
</init-param> 
</filter> 

<filter-mapping> 
<filter-name>StripesFilter</filter-name> 
<url-pattern>*.jsp</url-pattern> 
<dispatcher>REQUEST</dispatcher> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

<filter-mapping> 
<filter-name>StripesFilter</filter-name> 
<servlet-name>StripesDispatcher</servlet-name> 
<dispatcher>REQUEST</dispatcher> 
</filter-mapping> 

<servlet> 
<servlet-name>StripesDispatcher</servlet-name> 
<servlet-class>net.sourceforge.stripes.controller.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>StripesDispatcher</servlet-name> 
<url-pattern>*.action</url-pattern> 
</servlet-mapping> 

<!-- The Usual Welcome File List --> 
<welcome-file-list> 
<welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 
</web-app> 

Here's the Stripes action

 
package com.fullsix.demo.action; 

import java.io.File; 
import java.io.IOException; 
import net.sourceforge.stripes.action.ActionBean; 
import net.sourceforge.stripes.action.ActionBeanContext; 
import net.sourceforge.stripes.action.Before; 
import net.sourceforge.stripes.action.DefaultHandler; 
import net.sourceforge.stripes.action.FileBean; 
import net.sourceforge.stripes.action.ForwardResolution; 
import net.sourceforge.stripes.action.Resolution; 
import net.sourceforge.stripes.action.UrlBinding; 
import net.sourceforge.stripes.controller.LifecycleStage; 
import net.sourceforge.stripes.controller.StripesRequestWrapper; 
import org.apache.commons.lang.StringUtils; 
import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

/** 
* @author Damien Viel <viel@fullsix.com> 
* @version $Id$ 
*/ 
@UrlBinding("/upload.action") 
public class UploadActionBean implements ActionBean { 
private static final Log logger = LogFactory.getLog(UploadActionBean.class); 
private ActionBeanContext context; 
private FileBean filedata; 

@SuppressWarnings("unused") 
@Before(LifecycleStage.BindingAndValidation) 
private void rehydrate(){ 
String filename = getContext().getRequest().getParameter("Filename"); 
if (StringUtils.isNotEmpty(filename)){ 
StripesRequestWrapper req = (StripesRequestWrapper)getContext().getRequest(); 
filedata = req.getFileParameterValue("Filedata"); 
} 
} 

public ActionBeanContext getContext(){ 
return this.context; 
} 

public void setContext(ActionBeanContext context){ 
this.context = context; 
} 

@DefaultHandler 
public Resolution upload() { 
if (filedata!=null){ 
try{ 
filedata.save(new File(filedata.getFileName())); 
}catch (IOException e) { 
logger.error("Error while writing file :" + filedata.getFileName()); 
} 
} 
return new ForwardResolution("/success.jsp"); 
} 
} 

The JSP

To keep it simple, I've used source code from the simpleExample of the on-line demo at SWFUpload.

 
<%@ taglib uri="http://stripes.sourceforge.net/stripes.tld" prefix="stripes"%> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<title>SWFUpload Demos - Simple Demo</title> 
<link href="css/swf.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="swfupload/swfupload.js"></script> 
<script type="text/javascript" src="js/swfupload.queue.js"></script> 
<script type="text/javascript" src="js/fileprogress.js"></script> 
<script type="text/javascript" src="js/handlers.js"></script> 
<script type="text/javascript"> 
var swfu; 

window.onload = function() { 
var settings = { 
flash_url : "swfupload/swfupload_f9.swf", 
upload_url: "http://localhost:8080/upload.action", 
post_params: {"Test" : "Hello Stripes Users"}, 
file_size_limit : "100 MB", 
file_types : "*.*", 
file_types_description : "All Files", 
file_upload_limit : 100, 
file_queue_limit : 0, 
custom_settings : { 
progressTarget : "fsUploadProgress", 
cancelButtonId : "btnCancel" 
}, 
debug: false, 
// The event handler functions are defined in handlers.js 
file_queued_handler : fileQueued, 
file_queue_error_handler : fileQueueError, 
file_dialog_complete_handler : fileDialogComplete, 
upload_start_handler : uploadStart, 
upload_progress_handler : uploadProgress, 
upload_error_handler : uploadError, 
upload_success_handler : uploadSuccess, 
upload_complete_handler : uploadComplete, 
queue_complete_handler : queueComplete	// Queue plugin event 
}; 

swfu = new SWFUpload(settings); 
}; 
</script> 
</head> 
<body> 

<div id="content"> 
<h2>Simple Demo</h2> 
<stripes:form beanclass="com.fullsix.demo.action.UploadActionBean" id="form1"> 
<p>This page demonstrates a simple usage of SWFUpload. 
It uses the Queue Plugin to simplify uploading or cancelling all queued files. 
</p> 

<fieldset class="flash" id="fsUploadProgress"> 
<legend>Upload Queue</legend> 
</fieldset> 

<div id="divStatus">0 Files Uploaded</div> 
<div> 
<input type="button" value="Upload file (Max 100 MB)" 
onclick="swfu.selectFiles()" 
style="font-size: 8pt;" /> 
<input id="btnCancel" type="button" value="Cancel All Uploads"
onclick="swfu.cancelQueue();" 
style="font-size: 8pt;" disabled="disabled" /> 
</div> 
</stripes:form> 
</div> 

</body> 
</html> 

The zip file containing the eclipse project with source code is available here ->stripes-swfupload.zip

Original posts