Spring MVC File Upload

Jumat pagi sebelum kerja mau nulis dulu di sini ah,, sebenernya batas ngeblog adalah hari rabu jam 1 siang. Tapi ga papa deh dari pada ga ngeblog sama sekali -_-".

Article yang di bahas kali adalah upload file menggunakan Spring MVC, cuman ini Spring MVCnya masih versih jadul. Sebab di kantor pernah usul pake @RequestMapping buat bikin controllernya, cuman katanya pake yang jadul aja, sebab biar gampang bug trackingnya. Jadi buat controllenya masih di taro di dispatcher servlet.

Yu ah, daripada kebanyakan curhat langsung ke TKP saja. Seperti biasa kalo mau ngoding siapin dulu library yang di butuhkan, kali ini library yang di butuhkan adalah :

  • common-fileupload.jar
  • common-io.jar (yang terbaru lebih bagus)
  • spring.jar (intinya library springnya ya)

Setelah lihat library di atas, mulailah ke code javanya. Kelas yang pertama di buat adalah

FileUploadBean.java

public class FileUploadBean {
    private MultipartFile file;
    public void setFile(MultipartFile file) {
        this.file = file;
    }
    public MultipartFile getFile() {
        return file;
    }
}

selanjutnya buat class controller untuk menangani action pada saat upload file yaitu, UploadFile.java

@Controller
public class UploadFile extends SimpleFormController {
    @Override
    protected ModelAndView onSubmit(
        HttpServletRequest request,
        HttpServletResponse response,
        Object command,
        BindException errors) throws ServletException, IOException {
        ModelMap modelMap = new ModelMap();
        modelMap.addObject(new FileUploadBean());
        ModelAndView mav = new ModelAndView("uploadFile", modelMap);
        String destinationDir = getServletContext().getRealPath("/")+"/upload/";
        destinationDir = destinationDir.replace("/build", "");
        // membandikan jika request bukan MultipartHttpServletRequest
        if (!(request instanceof MultipartHttpServletRequest)) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Expected multipart request");
            return null;
        }
        FileUploadBean bean = (FileUploadBean) command;
        MultipartFile file = bean.getFile();
            // check jika file kosong
        if (file == null) {
            //Terserah mau di apain, misal diberi validasi
        }
        File destination = new File(destinationDir + file.getOriginalFilename());
        file.transferTo(destination);
        //response.getWriter().write("Success, wrote to " + destination.getAbsolutePath());
        //response.flushBuffer();
        return new ModelAndView(getSuccessView(), "destination" ,destination.getAbsolutePath());
    }
    @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder)
        throws ServletException {
        binder.registerCustomEditor(String.class, new StringMultipartFileEditor());
    }
}

setelah class javanya selesai dibuat, langkah selanjutnya adalah membuat file *.jspnya yaitu : uploadFile.jsp

<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<link href="../css/template.css" rel="stylesheet" type="text/css">
<link href="../css/dhtmlgoodies_calendar.css" rel="stylesheet" type="text/css">
<table width="98%" border="0" align="center" cellpadding="4" cellspacing="0">
    <tr class="judul">
      <td align="center">UPLOAD FILE</td>
    </tr>
</table>
<br>
<form:form method="post" action="uploadFile.htm" enctype="multipart/form-data" commandName="fileUploadBean">
</table>
  <table width="98%" border="0" align="center" cellpadding="2" cellspacing="1" bgcolor="#E7E3E7">
    <tr class="tabel_content">
      <td width="17%" height="19">File</td>
      <td width="83%" align="center">
        <div align="left">
          <input type="file" name="file">&nbsp;&nbsp;
          <input type="submit" class="button_big" value="Upload">
        </div>
      </td>
    </tr>
  </table>
<br>
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
      <td align="right" valign="bottom">
        <input type="button" name="kembali" value="KEMBALI" class="button_big" onClick="javascript:history.back(1)">
      </td>
  </tr>
</table>
</form:form>

jika jsp dan classnya selesai di buat, sekarang kita mampir ke dispatcherSevletnya, perlu di ingat anda hanya perlu menambahkan sedikit konfigurasi di dispatcher servletnya, silahkan tambahkan ikuti baris kode di bawah ini :

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
    
    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
    
    <!-- Konfigurasi Upload File -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
                <prop key="uploadFile.htm">uploadController</prop>
            </props>
        </property>
    </bean>
    
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />
    
    <!--
    The index controller.
    -->
    <bean name="indexController"
          class="org.springframework.web.servlet.mvc.ParameterizableViewController"
          p:viewName="index" />
    <bean id="fileUploadController" name="fileUploadController" class="com.adhit.upload.uploadFile">
        <property name="commandName" value="fileUploadBean"/>
        <property name="commandClass" value="com.adhit.upload.FileUploadBean"/>
        <property name="formView" value="uploadFile"/>
        <property name="successView" value="redirect:index.htm"/>
    </bean>
</beans>

Dan akhirnya semua selesai di buat class, jsp dan dispatcher-servlet.xmlnya. Seperti biasa males euy jelasin detail, jadi silahkan di pahami sajalah.

Akhirnya selesai juga artikel ini. Semoga bermanfaat bagi para pembaca yang membaca article ini, mohon maaf bila ada yang kurang atau ada yang salah dengan artikel ini.

Terima Kasih

Aditya Lukman Afandi

 

blog comments powered by Disqus