English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ejemplo de subida de archivos de Spring MVC

Spring MVC proporciona un método fácil para subir archivos, que puede ser una imagen u otro archivo. Veamos un ejemplo simple de cómo subir archivos utilizando Spring MVC.

Archivos jar necesarios

Para ejecutar este ejemplo, necesita cargar:

Archivos jar de Spring Core Archivos jar de Spring Web commons-fileupload.jar y commons-io.jar

1) Descargar todos los archivos jar de Spring, incluyendo core, web, aop, mvc, j2ee, procesamiento remoto, oxm, jdbc, orm, etc.

2)Descargar commons-io.jar

3)Descargar Commons -fileupload.jar

Pasos para subir archivos en Spring MVC (sin incluir MVC)

1)Agregar commons-io y fileupload.jar archivos

2)Agregar entrada spring-servlet.xml en CommonsMultipartResolver

<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

3)Crear un formulario para enviar archivos. El nombre del método debe ser "post" e ingresar " multiple/form-data"。

<form action="savefile" method="post" enctype="multipart/form-data">
Select File: <input type="file" name="file"/>
<input type="submit" value="Upload File"/>
</form>

4)Usar la clase CommonsMultipartFile en el Controller.

@RequestMapping(value="/savefile",method=RequestMethod.POST)
public ModelAndView upload(@RequestParam CommonsMultipartFile file,HttpSession session){
        String path=session.getServletContext().getRealPath("/);
        String filename=file.getOriginalFilename();
        
        System.out.println(path+" "+filename);
        try{
        byte barr[]=file.getBytes();
        
        BufferedOutputStream bout=new BufferedOutputStream(
                 new FileOutputStream(path+"/"+filename));
        bout.write(barr);
        bout.flush();
        bout.close();
        
        }catch(Exception e){System.out.println(e);}
        return new ModelAndView("upload-success","filename",path+"/"+filename);
    }

5)Mostrar imagen en JSP.

<h1>Upload Success</h1>
<img src="${filename}"/>

Ejemplo de subida de archivos de Spring MVC

Crear directorio de imágenes

Cree un directorio "imágenes" en su proyecto, ya que estamos escribiendo para que todos los archivos se guarden en"/images" directorio de código.

index.jsp

<a href="uploadform">Upload Image</a>

Emp.java

package com.w;3codebox;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
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.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
    private static final String UPLOAD_DIRECTORY = "/imagenes";
    
    @RequestMapping("uploadform")
    public ModelAndView uploadForm(){
        devolver nueva ModelAndView("uploadform"); 
    }
    
    @RequestMapping(value="savefile",method=RequestMethod.POST)
    public ModelAndView saveimage( @RequestParam CommonsMultipartFile file,
           HttpSession session) throws Exception{
    ServletContext context = session.getServletContext();
    String path = context.getRealPath(UPLOAD_DIRECTORY);
    String filename = file.getOriginalFilename();
    System.out.println(path+" "+filename);       
    byte[] bytes = file.getBytes();
    BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(
         new File(path + File.separator + filename)));
    stream.write(bytes);
    stream.flush();
    stream.close();
         
    devolver nueva ModelAndView("uploadform","filesuccess","¡El archivo se guardó con éxito!");
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app versión="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-_app_2_5.xsd">
 <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

spring-servlet.xml

Aquí, debe crear un bean para CommonsMultipartResolver。

<?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:context="http://www.springframework.org/schema/context"  
    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">  
<context:component-scan base-package="com.w3codebox"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/></property>
<property name="suffix" value=".jsp"></property>
</bean>
<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
</beans>

uploadform.jsp

El formulario debe ser method ="post" y enctype ="multipart/form-data"。

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form">
 
<!DOCTYPE html>
<html>
 <head>
 <title>Subida de Archivo de Imagen</title>
 </head>
 <body>
<h1>Ejemplo de Subida de Archivo - w3codebox/h1>
<h3 style="color:red">${filesuccess}</h3>
<form:form method="post" action="savefile" enctype="multipart/form-data">
<p><label for="image">Elegir Imagen</label></p>
<p><input name="file" id="fileToUpload" type="file" /></p>
<p><input type="submit" value="Subir"></p>
</form:form>
</body>
</html>

Salida

Ir a la ruta impresionada en la consola del servidor para ver el archivo subido.