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>
Last modified on 2011-04-21 by Maik Jablonski