Quick JSP upload tester code using commons-fileupload

Some of you have troubles getting JSP upload functions in your code working. Here is upload code example that you can drop in to a JSP file in your webapp directory to quickly check if uploading works. Common cause of problems is lack of write privileges in a directory where you are trying to upload to. It will upload to your current web app directory defined in filePath variable. The code uses commons-fileupload-1.2.2.jar and commons-io-2.4.jar in WEB-INF/lib to make it simple. Uploading code without these fileupload classes is bigger and not so easy readable. Here is the content of uploadtest.jsp.

<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<%
ServletContext context = pageContext.getServletContext();
String filePath = context.getRealPath(request.getContextPath()) + "/";
File file; 
int maxFileSize = 5000 * 1024; 
int maxMemSize = maxFileSize;
String contentType = request.getContentType();

if (contentType != null && (contentType.indexOf("multipart/form-data") >= 0)) {
  DiskFileItemFactory factory = new DiskFileItemFactory();
  factory.setSizeThreshold(maxMemSize); 
  factory.setRepository(new File("/tmp"));
  ServletFileUpload upload = new ServletFileUpload(factory);
  upload.setSizeMax(maxFileSize);
  try { 
    List fileItems = upload.parseRequest(request);
    Iterator i = fileItems.iterator();
    while (i.hasNext ()) {
      FileItem fi = (FileItem)i.next();
      if (!fi.isFormField ()) {
        String fieldName = fi.getFieldName();
        String fileName = fi.getName();
        if (fileName == "") out.println("You forgot to choose a file. <a href=''>Try again</a>");
        boolean isInMemory = fi.isInMemory();
        long sizeInBytes = fi.getSize();
        if( fileName.lastIndexOf("\\") >= 0 ) {
          file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\")));
        } else { 
          file = new File(filePath + fileName.substring(fileName.lastIndexOf("\\")+1));
        }
        fi.write(file) ;
        out.println("Uploaded Filename: " + filePath + fileName + ", sizeInBytes = " + sizeInBytes + "<br/><a href=''>Upload again</a>");
      }
    }
  } catch(Exception ex) { System.out.println(ex); }
} else {
    %> 
    <p>One needs commons-fileupload.x.x.jar and commons-io-x.x.jar fils in classpath (e.g. WEB-INF/lib).<br/> 
    You can download these from http://commons.apache.org/fileupload/ and http://commons.apache.org/io/</p>
    <h3>File Upload Test (uploaded file is to be saved under current context)</h3>
    <p><% out.println("Destination path: " + filePath); %></p>
    <form enctype="multipart/form-data" action="uploadtest.jsp" method="post"><table>
    <tr><td align="left">Select a file to upload:</td></tr>
    <tr><td align="left"><input type="file" name="filename" size="50"></td></tr>
    <tr><td align="left"><input type="submit" name="Submit" value="Upload">
    <input type="reset" name="Reset" value="Cancel"></td></tr>
    </table></form>
    <%   
  } %>

Bookmark and Share
This entry was posted in Java. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

*


2 × = fourteen

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>