Quantcast
Channel: HMKCode » ajax
Viewing all articles
Browse latest Browse all 4

Spring MVC Upload File Using jQuery.ajax | FormData | HTML Form

$
0
0

You can upload files to Spring MVC app in many different ways. For the server side, using MultipartHttpServletRequest is the easiest way to get uploaded files. For the client side we have different options, traditional synchronous method “using html form with submit” or asynchronous method by using Ajax.

Similar Post: Spring MVC + jQuery File Upload (multiple, drag&drop, progress…)

data:image/png;base64,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

Objectives:

  • How to receive uploaded files “Multipart” using Spring MVC?
  • How to upload files synchronously “HTML Form and Submit Button”?
  • How to upload files asynchronously using JQuyer.ajax or FormData object?

Environment:

  • Eclipse
  • Jetty (or any java server)
  • Firefox or Chrome

Libraries:

Source Code @ github

( 1 ) Java Project

spring-mvc-file-upload-project

( 2 ) Server Side (Java & XML)

  • RestController.java: Spring MVC controller with two method get & upload.
  1. upload() receive the upload file. Notice the MultipartHttpServletRequest class which we are using to get files out of the request object.
  2. get() retrieve last upload file.
package com.hmkcode.controllers;

import java.io.IOException;
import java.util.Calendar;
import java.util.Iterator;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.util.FileCopyUtils;

import com.hmkcode.vo.UploadedFile;

@Controller
@RequestMapping("/cont")
public class RestController {

  UploadedFile ufile;
  public RestController(){
  	System.out.println("init RestController");
  	ufile = new UploadedFile();
  }

  @RequestMapping(value = "/get/{value}", method = RequestMethod.GET)
  public void get(HttpServletResponse response,@PathVariable String value){
 		try {

 		 	response.setContentType(ufile.type);
			response.setContentLength(ufile.length);
	 		FileCopyUtils.copy(ufile.bytes, response.getOutputStream());

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
  }

   @RequestMapping(value = "/upload", method = RequestMethod.POST)
   public @ResponseBody String upload(MultipartHttpServletRequest request, HttpServletResponse response) {                 

  	 //0. notice, we have used MultipartHttpServletRequest

  	 //1. get the files from the request object
	 Iterator<String> itr =  request.getFileNames();

	 MultipartFile mpf = request.getFile(itr.next());
  	 System.out.println(mpf.getOriginalFilename() +" uploaded!");

  	 try {
                //just temporary save file info into ufile
		ufile.length = mpf.getBytes().length;
		ufile.bytes= mpf.getBytes();
	  	ufile.type = mpf.getContentType();
	  	ufile.name = mpf.getOriginalFilename();

	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}

  	 //2. send it back to the client as <img> that calls get method
  	 //we are using getTimeInMillis to avoid server cached image 

  	 return "<img src='http://localhost:8080/spring-mvc-file-upload/rest/cont/get/"+Calendar.getInstance().getTimeInMillis()+"' />";

  }

}
  • UploadedFile.java : just a helper class to store property of last uploaded file such as name, length, bytes…
package com.hmkcode.vo;

public class UploadedFile {

	public int length;
	public byte[] bytes;
	public String name;
	public String type;
}
  • rest-servlet.xml : Spring context configuration file.
<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:context="http://www.springframework.org/schema/context"
  xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

  <context:component-scan base-package="com.hmkcode.controllers" />
  <mvc:annotation-driven />
  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
</beans>
  • 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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>SpringMVC</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>rest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app>

( 3 ) Client Side (index.html)

  • We need to import two javascript libraries.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring MVC - Upload File</title>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="http://malsup.github.com/jquery.form.js"></script>
  • Build function to send ajax request using jquery form plugin.
//using jquery.form.js
function uploadJqueryForm(){
    $('#result').html('');

   $("#form2").ajaxForm({
	success:function(data) { 
	      $('#result').html(data);
	 },
	 dataType:"text"
   }).submit();
}
//using FormData() object
function uploadFormData(){
    $('#result').html('');

  var oMyForm = new FormData();
  oMyForm.append("file", file2.files[0]);

  $.ajax({
    url: 'http://localhost:8080/spring-mvc-file-upload/rest/cont/upload',
    data: oMyForm,
    dataType: 'text',
    processData: false,
    contentType: false,
    type: 'POST',
    success: function(data){
      $('#result').html(data);
    }
  });
}
  • Create two html forms one for the synchronous request and the other for the ajax request
<body>
<h1>SpringMVC - File Upload with/without Ajax</h1> 

<!--  Form 1 -->
<i>Uploading File Without Ajax</i><br/>
<form id="form1" method="post" action="/spring-mvc-file-upload/rest/cont/upload" enctype="multipart/form-data">

  <!-- File input -->     
  <input name="file" id="file" type="file" /><br/>

  <input type="submit" value="Upload" />
</form>
<hr/>
<!--  Form 2 -->
<i>Uploading File With Ajax</i><br/>
<form id="form2" method="post" action="/spring-mvc-file-upload/rest/cont/upload" enctype="multipart/form-data">
  <!-- File input -->     
  <input name="file2" id="file2" type="file" /><br/>
</form>

<button value="Submit" onclick="uploadJqueryForm()" >Upload</button><i>Using JQuery Form Plugin</i><br/>
<button value="Submit" onclick="uploadFormData()" >Upload</button><i>Using FormData Object</i>

<div id="result"></div>
</body>
</html>

( 3 ) Run

  • Run Jetty or your java server
  • Go to http://localhost:8080/spring-mvc-file-upload
  • The sample is designed to upload images, however it can be used to upload any file type.

  • If you upload an image without using Ajax, you will see the the uploaded the image in a new page.
  • If you upload an image with Ajax, you will see the uploaded image at the bottom of the page.

Similar Post: Spring MVC + jQuery File Upload (multiple, drag&drop, progress…)


Viewing all articles
Browse latest Browse all 4

Trending Articles