20 Haziran 2016 Pazartesi

Spring MVC ile Dosya Yükleme


Bu yazımda sizlere Spring MVC ile file upload işleminden bahsedeceğim. Bu işlem Spring MVC de multipart request lerin handle edilme işlemidir. Bu multipart request leri handle etmenin 2 yolu vardır.

1. StandartServletMultipartResolver
Servlet 3.0 ın sunduğu bir özellik olup , uygulamada ki Servlet sürümünün 3.0 veya üzeri olmasını gerektirir.

2. CommonsMultipartResolver
Jakarta commons FileUpload kullanarak multipart requestleri çözer.


Şimdilik 2.yolu kullanarak dosya yükleme işlemini gerçekleştireceğiz. Bunun için pom.xml dosyamıza aşağıda ki satırları eklememiz gerekmektedir.

<dependency>
       <groupId>org.springframework</groupId>
       <artifactId>spring</artifactId>
       <version>2.5.6</version>
   </dependency>

<!-- Spring MVC framework -->
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>2.5.6</version>
   </dependency>
<!-- Apache Commons Upload -->
   <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.2</version>
    </dependency>

<!-- Apache Commons Upload -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
    </dependency>
<!-- JSTL -->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>


Bunları ekledikten sonra DispatcherServlet classımıza temp dosyalarının tutulacağı yeri göstermek maksadı ile aşağıda ki metodu eklememiz gerekiyor.


@Override
protected void customizeRegistration(Dynamic registration) {
    registration.addMapping("/");
    registration.setMultipartConfig(new        MultipartConfigElement("/home/mesud/springtemp",2097152, 4194304, 0));
}

Artık JSP sayfamızı ve Controller classımızı yazabiliriz.


fileUpload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

<div class="body">
   <h1>Resim Yükleme Formu</h1>
   <form method="POST" enctype="multipart/form-data">
      <label>Profil Resmi : </label> <input type="file" name="profilResim"
   accept="image/jpeg,image/png,image/gif" />
   <br/>
   <input type="submit" value="<s:message code="register.save"/>" />
   <br/>
   <strong> ${uploadFileName} </strong>
   </form>
</div>

FileUploadController.java

package com.mesutemre.controller;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;


@Controller
public class FileUploadController {

@RequestMapping(value = "/fileUpload", method = RequestMethod.GET)
public String getFileUploadPage() {
 return "fileUpload";
}

@RequestMapping(value = "/fileUpload", method = RequestMethod.POST)
public String uploadImageFile(
@RequestParam("profilResim") MultipartFile file , Model model) {

if (!file.isEmpty()) {
 try {
  BufferedOutputStream stream = new BufferedOutputStream(
  new FileOutputStream(new File("/home/mesud/springupload/"+file.getName())));
  FileCopyUtils.copy(file.getInputStream(), stream);
  stream.close();
  model.addAttribute("uploadFileName", file.getName());
  System.out.println(file.getName()+" başarı ile yüklendi...");
  System.out.println("Dosya büyüklük : "+file.getSize());
 } catch (Exception e) {
   e.printStackTrace();
 }
 } else {
   System.err.println("Boş dosya...");
}

return "fileUpload";
}

}

Yükleme ekranımız aşağıda ki gibi olur.




Bir sonraki yazıda görüşmek üzere hoşçakalın. 

Hiç yorum yok:

Yorum Gönder