📜  Spring MVC 文件上传

📅  最后修改于: 2022-05-13 01:54:48.439000             🧑  作者: Mango

Spring MVC 文件上传

Spring MVC 架构使用“FrontController”设计模式,这是任何 MVC 设计实现的基础。 DispatcherServlet 是此设计的核心,其中 HTTP 请求被委托给控制器,视图被解析为底层视图技术,此外还提供对上传文件的支持。与任何常规 servlet 一样,DispatcherServlet 可以与自定义处理程序映射一起配置。

Spring MVC 框架支持CommonsMultipartResolver为基于 Web 的应用程序上传任何类型的文件。在这里,我们将创建一个 Spring MVC Web 应用程序并配置MultipartResolver以上传文件(图像)并在 Web 上显示它们。

执行:

创建 Spring MVC 文件上传项目的步骤

第 1 步:我们需要创建一个 maven webapp 项目。现在,单击创建 Maven 项目并将 maven webapp 原型添加为基础包。输入项目的组 ID 和工件 ID,然后单击完成。

项目结构如下所示:

第 2 步:让我们首先在创建 maven 项目后创建的 pom.xml 中添加一些依赖项。 pom.xml 定义了 maven 必须为您获取和管理的所有依赖项。 commons-fileuploadcommons-io是 MultipartResolver 的重要依赖项。根据此添加所有依赖项:

依赖文件:pom.xml

XML

  

  4.0.0
  
  com.gfg
  SpringMVCFileUpload
  0.0.1-SNAPSHOT
  war
  
  SpringMVCFileUpload Maven Webapp
  
  http://www.example.com
  
  
    UTF-8
    1.7
    1.7
  
  
  
    
      junit
      junit
      4.11
      test
    
  
  
  
    org.springframework  
    spring-webmvc  
    5.1.1.RELEASE  
  
  
  
    org.apache.tomcat  
    tomcat-jasper  
    9.0.12  
  
      
      
    
    javax.servlet    
    servlet-api    
    3.0-alpha-1    
  
      
  
  
    javax.servlet  
    jstl  
    1.2  
  
      


    commons-fileupload
    commons-fileupload
    1.4

      


    commons-io
    commons-io
    2.11.0

  
  
  
  
  
    SpringMVCFileUpload
    
      
        
          maven-clean-plugin
          3.1.0
        
          
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
      
    
  


XML

  
    To do List
  
    
        login.do
    
      
    
        gfg
        
            org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            /WEB-INF/gfg-servlet.xml
        
        1
    
  
    
        gfg
        /
    


XML

  
    
      
    
      
    
      
     
        
            /WEB-INF/views/
        
        
            .jsp
        
    
      
      
          
      
      


Java
// Java Program to Illustrate UploadFileController Class
  
package com.gfg.controller;
  
// Importing required classes
import java.io.File;
import java.io.FileOutputStream;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
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;
  
// Annotation
@Controller
// Class
public class UploadFileController {
  
    @GetMapping("/upload") public String upload()
    {
        return "fileform";
    }
  
    @RequestMapping(value = "/uploadfile",
                    method = RequestMethod.POST)
    public String
    fileUpload(@RequestParam("thisfile")
               CommonsMultipartFile file, HttpSession s,
               Model mod)
    {
  
        // Getting bytes of file and
        // storing it in a byte array
        byte[] data = file.getBytes();
  
        String filePath
            = s.getServletContext().getRealPath("/")
              + "WEB-INF" + File.separator + "resources"
              + File.separator + "image" + File.separator
              + file.getOriginalFilename();
  
        // Try block to check for exceptions
        try {
  
            // Creating an object of FileOutputStream class
            FileOutputStream fileout
                = new FileOutputStream(filePath);
            fileout.write(data);
  
            // Closing connections of file
            // using close() method
            fileout.close();
            mod.addAttribute("imgName",
                             file.getOriginalFilename());
        }
  
        // Catch block to handle the exceptions
        catch (Exception e) {
  
            // Displaying the exception/s along with
            // line number using printStackTrace() method
            e.printStackTrace();
        }
  
        return "showupload";
    }
}


HTML


  
    
    
    
  
    
    
  
    File uploader
  
  
    

Upload File

    
        
                              
             
                              


HTML
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %> 




Insert title here


  
    

File Uploaded

       "/>


第 3 步: WEB-INF文件夹中的web.xml文件定义了与不同 URL 和 servlet 的映射,以处理对这些 URL 的请求。在这个配置文件中,我们使用了应用程序启动的监听器,配置了 servlet,并添加了一个 servlet-mapping 来映射 URL。

配置文件:web.xml

XML


  
    To do List
  
    
        login.do
    
      
    
        gfg
        
            org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            /WEB-INF/gfg-servlet.xml
        
        1
    
  
    
        gfg
        /
    

文件:gfg-servlet.xml

这是位于“ /src/main/webapp/WEB-INF/gfg.servlet.xml ”中的 gfg-servlet.xml 文件。此文件处理 Web 应用程序的所有 HTTP 请求。注解驱动启用 spring @Controller函数,资源映射有助于处理所有资源的 HTTP 请求。 bean 配置有助于识别和扫描位于 views 文件夹中的 jsp。组件扫描根据提到的注释定位和分配 bean。还添加了资源映射,将所有资源映射到查看一个页面。

第 4 步: id 为multipartResolver的 bean 将有助于实例化CommonsMultipartResolver

XML


  
    
      
    
      
    
      
     
        
            /WEB-INF/views/
        
        
            .jsp
        
    
      
      
          
      
      

第 7 步: com.gfg.controller中的UploadFileController类具有用于映射两个请求的方法。 upload 方法是一个 get 映射和简单的重定向到fileform.jsp视图页面。 fileUpload方法发送一个Post请求并重定向 showupload 页面。这个类有三个参数CommonsMultipartFile获取上传的文件。使用FileOutputStream将文件转换为字节数组并保存到文件中,模型参数用于将文件名作为属性添加到 showupload.jsp 文件中。

例子

Java

// Java Program to Illustrate UploadFileController Class
  
package com.gfg.controller;
  
// Importing required classes
import java.io.File;
import java.io.FileOutputStream;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
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;
  
// Annotation
@Controller
// Class
public class UploadFileController {
  
    @GetMapping("/upload") public String upload()
    {
        return "fileform";
    }
  
    @RequestMapping(value = "/uploadfile",
                    method = RequestMethod.POST)
    public String
    fileUpload(@RequestParam("thisfile")
               CommonsMultipartFile file, HttpSession s,
               Model mod)
    {
  
        // Getting bytes of file and
        // storing it in a byte array
        byte[] data = file.getBytes();
  
        String filePath
            = s.getServletContext().getRealPath("/")
              + "WEB-INF" + File.separator + "resources"
              + File.separator + "image" + File.separator
              + file.getOriginalFilename();
  
        // Try block to check for exceptions
        try {
  
            // Creating an object of FileOutputStream class
            FileOutputStream fileout
                = new FileOutputStream(filePath);
            fileout.write(data);
  
            // Closing connections of file
            // using close() method
            fileout.close();
            mod.addAttribute("imgName",
                             file.getOriginalFilename());
        }
  
        // Catch block to handle the exceptions
        catch (Exception e) {
  
            // Displaying the exception/s along with
            // line number using printStackTrace() method
            e.printStackTrace();
        }
  
        return "showupload";
    }
}

步骤 8: views文件夹中的fileform.jsp定义了 enctype 为multipart/form-data 的上传表单。我们已经使用引导程序来正确设置页面样式。

例子

HTML



  
    
    
    
  
    
    
  
    File uploader
  
  
    

Upload File

    
        
                              
             
                              

HTML

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %> 




Insert title here


  
    

File Uploaded

       "/>

第 9 步:现在是时候运行您的项目了,启动Tomcat 服务器并运行您的应用程序,现在在任何浏览器中输入“http://localhost:8080/SpringMVCFileUpload/upload”

输出:

因此,我们创建了一个带有上传表单的 Spring MVC Web 应用程序,并将上传的图像显示在 Web 上。