jueves, 23 de febrero de 2017

Spring MVC Subir Documentos - Uno o Múltiples

La carga de archivos es una tarea común en cualquier aplicación web. Hoy vamos a aprender acerca de la SPRING MVC File Upload, específicamente Spring MVC File Upload para uno o varios archivos.

Resultados:


 upload.jsp
   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Subir Documento</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
 <div class="container-fluid">
  <div class="row-fluid">
   <div class="col-md-6">
     <form method="POST" action="file/uploadFile" enctype="multipart/form-data">
      <div class="form-group">
       <label class="control-label">Documento: </label>
       <input type="file" class="form-control" name="file"> 
      </div>
      <div class="form-group">
       <input type="submit" class="form-control btn btn-success" value="Subir">
      </div>
     </form>
   </div>
  </div>
 </div>
</body>
</html>
 uploadMultiple.jsp
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Subir Documento</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
 <div class="container-fluid">
  <div class="row-fluid">
   <div class="col-md-6">
     <form method="POST" action="file/uploadMultipleFile" enctype="multipart/form-data">
      <div class="form-group">
       <label class="control-label">Documento1: </label>
       <input type="file" class="form-control" name="file"> 
      </div>
      <div class="form-group">
       <label class="control-label">Documento2: </label>
       <input type="file" class="form-control" name="file"> 
      </div>     
      <div class="form-group">
       <input type="submit" class="form-control btn btn-success" value="Subir">
      </div>    
     </form>
   </div>
  </div>
 </div>
</body>
</html>
 FileUploadController.java
   package com.cloudsrcsoft.upload;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
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.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;


@Controller
@RequestMapping(value="/file")
public class FileUploadController {

 private static final Logger logger = LoggerFactory.getLogger(FileUploadController.class);

 //subir archivo
 @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
 public @ResponseBody String uploadFile(@RequestParam("file") MultipartFile file) {

  if (!file.isEmpty()) {
   try {
    byte[] bytes = file.getBytes();
    // Crear el directorio para almacenar el archivo
    String rootPath = System.getProperty("catalina.home");
    File dir = new File(rootPath + File.separator + "tmpFiles");
    
    if (!dir.exists())
     dir.mkdirs();

    // Crear documento en el servidor
    File serverFile = new File(dir.getAbsolutePath() + File.separator + file.getOriginalFilename());
    BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));
    stream.write(bytes);
    stream.close();

    logger.info("Ubicación de documento = " + serverFile.getAbsolutePath());

    return "Documento subido correctamente = " + file.getOriginalFilename() + " Ubicacion del Archivo = " + serverFile.getAbsolutePath();
   } catch (Exception e) {
    return "Ocurrio un error al subir documento" + file.getOriginalFilename() + " => " + e.getMessage();
   }
  } else {
   return "Ocurrio un error al subir " + file.getOriginalFilename() + " documento vacio.";
  }
 }

 // subir multiples archivos
 @RequestMapping(value = "/uploadMultipleFile", method = RequestMethod.POST)
 public @ResponseBody String uploadMultipleFile(@RequestParam("file") MultipartFile[] files) {

  if (files.length != files.length)
   return "Falta información";

  String message = "";
  for (int i = 0; i < files.length; i++) {
   MultipartFile file = files[i];
   String name = files[i].getOriginalFilename();
   try {
    byte[] bytes = file.getBytes();

    // Crear el directorio para almacenar el archivo
    String rootPath = System.getProperty("catalina.home");
    File dir = new File(rootPath + File.separator + "tmpFiles");
    if (!dir.exists())
     dir.mkdirs();

    // Crear documento en el servidor
    File serverFile = new File(dir.getAbsolutePath() + File.separator + name);
    BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));
    stream.write(bytes);
    stream.close();

    logger.info("Ubicación de documento = " + serverFile.getAbsolutePath());

    message = message + "<br> Documentos Subidos Correctamente = " + name + " Ubicacion del Archivo = " + serverFile.getAbsolutePath();
   } catch (Exception e) {
    return "Ocurrio un error al subir " + name + " => " + e.getMessage();
   }
  }
  return message;
 }
}

0 comentarios:

Publicar un comentario