Sunday, November 23, 2014

Upload file to Server: Using Servlet and Javascript

Folder Structure:

Project root
---src
------com
---------FileLocationContextListener.java
---------UploadFileServlet.java
WebContent
---resources
------js
---------ImgUploader.js
---WEB-INF
------web.xml
---file.jsp

FileLocationContextListener.java
package com;

import java.io.File;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class FileLocationContextListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent sce) {
// String rootPath = System.getProperty("catalina.home");
String rootPath = "C:/Users/Suresh/Desktop/temp";
ServletContext ctx = sce.getServletContext();
String relativePath = ctx.getInitParameter("tempfile.dir");

File file = new File(rootPath + File.separator + relativePath);
System.out.println(file.getAbsolutePath());
if(! file.exists()) {
boolean dirCreated = file.mkdir();
System.out.println("Directory created?" + dirCreated);
}

System.out.println("File Directory created to be used for storing files");
ctx.setAttribute("FILES_DIR_FILE", file);
ctx.setAttribute("FILES_DIR", rootPath + File.separator + relativePath);
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
//do cleanup if needed
}
}

UploadFileServlet.java
package com;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UploadFileServlet extends HttpServlet {
private ServletFileUpload uploader = null;

public void init() throws ServletException {
DiskFileItemFactory fileFactory = new DiskFileItemFactory();
File filesDir = (File) this.getServletContext().getAttribute("FILES_DIR_FILE");
fileFactory.setRepository(filesDir);
this.uploader = new ServletFileUpload(fileFactory);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(! ServletFileUpload.isMultipartContent(request))
throw new ServletException("Content type is not multipar/form-data");

response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.write("<html><head></head><body>");

try {
List<FileItem> fileItemsList = uploader.parseRequest(request);
Iterator<FileItem> fileItemsIterator = fileItemsList.iterator();

while(fileItemsIterator.hasNext()) {
FileItem fileItem = fileItemsIterator.next();

System.out.println("FieldName=" + fileItem.getFieldName());
System.out.println("FileName=" + fileItem.getName());
System.out.println("Content Type=" + fileItem.getContentType());
System.out.println("Size in bytes=" + fileItem.getSize());

File file = new File(this.getServletContext().getAttribute("FILES_DIR") + File.separator + fileItem.getName());
System.out.println("Absolute Path at server=" + file.getAbsolutePath());
fileItem.write(file);
out.write("File " + fileItem.getName() + " uploaded successfully.");
out.write("<br>");
out.write("<a href='UploadFileServlet?fileName=" + fileItem.getName() + "'>Download</a>");
}
} catch(Exception e) {
e.printStackTrace();
}

out.write("</body></html>");
}
}

ImgUploader.js

function fileUpload(form, action_url, div_id) {
// Create the iframe...
var iframe = document.createElement("iframe");
iframe.setAttribute("id", "upload_iframe");
iframe.setAttribute("name", "upload_iframe");
iframe.setAttribute("width", "0");
iframe.setAttribute("height", "0");
iframe.setAttribute("border", "0");
iframe.setAttribute("style", "width: 0; height: 0; border: none;");

// Add to document...
form.parentNode.appendChild(iframe);
window.frames['upload_iframe'].name = "upload_iframe";

iframeId = document.getElementById("upload_iframe");

// Add event...
var eventHandler = function() {

if (iframeId.detachEvent)
iframeId.detachEvent("onload", eventHandler);
else
iframeId.removeEventListener("load", eventHandler, false);

// Message from server...
if (iframeId.contentDocument) {
content = iframeId.contentDocument.body.innerHTML;
} else if (iframeId.contentWindow) {
content = iframeId.contentWindow.document.body.innerHTML;
} else if (iframeId.document) {
content = iframeId.document.body.innerHTML;
}

document.getElementById(div_id).innerHTML = content;

// Del the iframe...
setTimeout('iframeId.parentNode.removeChild(iframeId)', 250);
}

if (iframeId.addEventListener)
iframeId.addEventListener("load", eventHandler, true);
if (iframeId.attachEvent)
iframeId.attachEvent("onload", eventHandler);

// Set properties of form...
form.setAttribute("target", "upload_iframe");
form.setAttribute("action", action_url);
form.setAttribute("method", "post");
form.setAttribute("enctype", "multipart/form-data");
form.setAttribute("encoding", "multipart/form-data");

// Submit the form...
form.submit();

document.getElementById(div_id).innerHTML = "Uploading...";
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>ImgUploadProj</display-name>
  <welcome-file-list>
    <welcome-file>file.jsp</welcome-file>
  </welcome-file-list>
  <context-param>
  <param-name>tempfile.dir</param-name>
  <param-value>tmpfiles</param-value>
  </context-param>
  <listener>
  <listener-class>com.FileLocationContextListener</listener-class>
  </listener>
  <servlet>
  <servlet-name>Image Upload Servlet</servlet-name>
  <servlet-class>com.UploadFileServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  <servlet-name>Image Upload Servlet</servlet-name>
  <url-pattern>/upload.file</url-pattern>
  </servlet-mapping>
</web-app>

file.jsp

<html>
<head>
<script type="text/javascript" src="resources/js/ImgUploader.js"></script>
<link rel="stylesheet" type="text/css" href="resources/css/styles.css">
</head>
<body>
<form>
<div class="upload">
<!--input type="file" name="datafile"
onchange="fileUpload(this.form,'upload.file','upload'); return false;" /-->
<input type="file" name="datafile" />
<br>
<button type="button"
onclick="fileUpload(this.form,'upload.file','upload'); return false;">Upload
File</button>
</div>
</form>
</body>
</html>

No comments:

Post a Comment