How to create a simple file upload?
I've recently built a small web-site on top of Jease where people should be able to upload some MP3-files for a party. Allowing people to access the JeaseCMS-interface was no option (although Jease is easy to use, this is overkill for such a fire-and-forget-task), so I had to build a small JSP-script which handles the upload directly via the public site.
The script makes use of Apache Commons Fileupload-Library which is distributed with Jease anyway, so all I had to do is to wire things together.
The upload-script is splitted in three parts:
- The HTML-Code for the multipart-data upload-form. It provides an additional field for an (optional) title which serves as an example on how to get attributes from a multipart-data-form.
- The Java-Code for parsing the request and transfering the contents from the request into a Jease-File-Object.
- A simple JSP-Snippet which iterates all files in the upload-folder to display a simple directory listing of submitted files.
To use the script below, you can simply create a "Script" within the JeaseCMS and copy&paste the content of the script below.
Have fun!
<%@page import="org.apache.commons.io.*" %> <%@page import="org.apache.commons.fileupload.*"%> <%@page import="org.apache.commons.fileupload.servlet.*" %> <%@page import="jfix.util.*" %> <%@page import="jease.cmf.service.*" %> <%@page import="jease.cms.domain.*" %> <%-- Display file upload form --%> <form action="" method="post" enctype="multipart/form-data"> <table> <tr> <td>Title:</td> <td><input type="text" name="title" size="40" /></td> </tr> <tr> <td>File:</td> <td><input name="file" type="file" /></td> </tr> <tr> <td> </td> <td><input name="submit" type="submit" value="Submit" /></td> </tr> </table> </form> <%-- Upload submitted form into file object into uploadFolder --%> <% Folder uploadFolder = (Folder) ((Content) request.getAttribute("Node")).getParent(); if (ServletFileUpload.isMultipartContent(request)) { File cmsFile = new File(); FileItemIterator iter = new ServletFileUpload().getItemIterator(request); while (iter.hasNext()) { FileItemStream item = iter.next(); java.io.InputStream inputStream = item.openStream(); if (item.isFormField()) { if (item.getFieldName().equals("title")) { cmsFile.setTitle(IOUtils.toString(inputStream, "UTF-8")); } } else { if (Validations.isNotEmpty(item.getName())) { if (Validations.isEmpty(cmsFile.getTitle())) { cmsFile.setTitle(item.getName()); } cmsFile.setId(Filenames.asId(item.getName())); cmsFile.setContentType(item.getContentType()); cmsFile.setLastModified(new java.util.Date()); java.io.OutputStream outputStream = new java.io.FileOutputStream(cmsFile.getFile()); IOUtils.copy(inputStream, outputStream); outputStream.close(); } } inputStream.close(); } try { Nodes.append(uploadFolder, cmsFile); } catch(Exception e) { out.println(e.getMessage()); } } %> <%-- Create a simple directory listing for all files in uploadFolder --%> <ul> <% for (File file : uploadFolder.getChildren(File.class)) { %> <li><a href="<%=request.getContextPath()%><%=file.getPath()%>"><%=file.getTitle()%></a></li> <% } %> </ul>