SpringMVC实现文件上传和下载的工具类

以下是详细的“SpringMVC实现文件上传和下载的工具类”的攻略。

目录

准备工作

在实现文件上传和下载之前,我们需要在pom.xml文件中添加相关的依赖项。如果你使用的是Maven,请在该文件中添加以下依赖项:

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-webmvc</artifactId>
     <version>5.2.6.RELEASE</version>
 </dependency>

同时,我们还需要在web.xml文件中添加相关的配置项,如下所示:

<servlet>
     <servlet-name>DispatcherServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:springmvc-config.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
     <servlet-name>DispatcherServlet</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>

上面的配置项中,需要注意的是contextConfigLocation。这里指定了springmvc-config.xml的配置文件路径,这个配置文件需要我们自己新建。

文件上传

文件上传是比较常见的操作,SpringMVC提供了很简单的方式来实现。下面我们来看看具体的实现步骤。

前端页面

首先,我们需要在前端页面中添加文件上传的表单。具体的代码如下所示:

<form action="uploadFile" method="post" enctype="multipart/form-data">
     <input type="file" name="file"/>
     <input type="submit" value="上传"/>
 </form>

上面的代码中,我们使用了HTML的form标签来添加文件上传的表单,其中action字段指定了上传请求的路径,这个后面会在后端Controller中实现。同时,我们也需要在input标签中指定type为file。

后端Controller

代码示例1:

@Controller
public class FileController {
     @RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
     public String uploadFile(@RequestParam("file") MultipartFile file,ModelMap model) {
         //获取文件名
         String originalFilename=file.getOriginalFilename();
         //获取文件的扩展名
         String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf(".")+1);
         //设置文件名字
         String fileName=UUID.randomUUID().toString()+"."+fileSuffix;
         //指定文件上传的路径
         File dest=new File("D:/uploadFile/"+fileName);
         try {
             //上传文件
             file.transferTo(dest);
             model.addAttribute("msg","上传成功");
         } catch (IOException e) {
             model.addAttribute("msg","上传失败");
             e.printStackTrace();
         }
         return "uploadResult";
     }
 }

上面的代码中,我们使用了@RequestParam注解来获取MultipartFile类型的文件对象,并且使用了transferTo方法将文件保存到指定的路径下。这里指定了D:/uploadFile为上传文件的路径,你可以根据自己的需求进行修改。

需要注意的是,在默认情况下,上传的文件是会受到大小限制的,这个大小限制默认为1MB。如果你想修改这个限制,可以在web.xml文件中添加以下配置项:

<multipart-config>
     <!--限制单个上传文件大小-->
     <max-file-size>50MB</max-file-size>
     <!--限制上传文件总大小-->
     <max-request-size>100MB</max-request-size>
     <!--设置临界值,当文件大于这个值时,才会写入临时文件夹。-->
     <file-size-threshold>0</file-size-threshold>
 </multipart-config>

代码示例2:

@Controller
public class FileController {
    @ResponseBody
    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public String upload(HttpServletRequest request){
        //创建一个通用的多部分解析器
        CommonsMultipartResolver multipartResolver =
                new CommonsMultipartResolver(request.getSession().getServletContext());
        //判断 request 是否有文件上传,即多部分请求
        if(multipartResolver.isMultipart(request)){
            //转换成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
            //取得request中的所有文件名
            Iterator<String> iter = multiRequest.getFileNames();
            while(iter.hasNext()){
                //取得上传文件
                MultipartFile file = multiRequest.getFile(iter.next());
                if(file != null){
                    //取得当前上传文件的文件名称
                    String myFileName = file.getOriginalFilename();
                    if(myFileName != null && myFileName.trim() !=""){
                        try {
                            //保存文件
                            FileUtils.copyInputStreamToFile(file.getInputStream(), new File("D:/uploadFile/"+myFileName));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }

        }
        return "上传成功";
    }
}

上面的代码中,我们使用了CommonsMultipartResolver来处理文件上传,并通过FileUtils.copyInputStreamToFile方法来保存文件到指定的路径下。

文件下载
文件下载与文件上传类似,同样是使用SpringMVC提供的方法来实现。下面我们来看看具体的实现步骤。

后端Controller
首先,我们需要在后端Controller中实现文件下载的方法。具体的代码如下:

@RequestMapping("/downloadFile")
public ResponseEntity<InputStreamResource> downloadFile(@RequestParam String fileName) throws IOException {
     ClassPathResource file = new ClassPathResource("downloadFile/"+fileName+".pdf");
     InputStreamResource resource = new InputStreamResource(file.getInputStream());
     HttpHeaders headers = new HttpHeaders();
     headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", file.getFilename()));
     headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
     headers.add("Pragma", "no-cache");
     headers.add("Expires", "0");
     ResponseEntity<InputStreamResource> response = ResponseEntity.ok().headers(headers).contentLength(file.contentLength()).contentType(MediaType.parseMediaType("application/octet-stream")).body(resource);
     return response;
 }

上面的代码中,我们使用了InputStreamResource类来将文件转换为流,并通过ResponseEntity对象将流导出到前端,用于实现文件下载的功能。同时,我们也使用了HttpHeaders来设置响应头信息,让浏览器以下载的方式打开文件。

需要注意的是,上面代码中的文件路径是在class路径下,如果你想下载的文件不在该路径下,需要将路径进行相应的修改。

前端页面
最后,我们需要在前端页面中添加下载链接。具体的代码如下:

<a href="downloadFile?fileName=test">下载文件</a>

上面的代码中,我们使用了a标签添加了下载链接,其中的href路径为下载请求的路径,这个路径会在后端Controller中进行拦截和处理。

总结
通过上述的攻略,我们可以很容易地实现文件上传和下载的操作。需要注意的是,这里只是提供了一种比较基础的实现方式,如果你有更加复杂的需求,可以根据自己的情况进行相应的修改和扩展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC实现文件上传和下载的工具类 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • java实现简单年龄计算器

    Java实现简单年龄计算器 简介 在这篇文章中,我们将会学习如何用Java编写一个简单的年龄计算器,可以输入生日日期,程序将会计算出当前的年龄。 前置知识 在编写本文所述的程序时,需要具备以下知识: Java基础语法 日期时间相关类的使用 步骤 获取当前时间 java LocalDateTime today = LocalDateTime.now(); 这里…

    Java 2023年6月15日
    00
  • spring boot 与kafka集成的示例代码

    下面就给您讲解Spring Boot与Kafka集成的示例代码攻略。 1. 引入依赖 首先,在pom.xml文件中添加Kafka相关的依赖: <!–kafka–> <dependency> <groupId>org.springframework.kafka</groupId> <artifactId…

    Java 2023年5月20日
    00
  • Mybatis源码分析之插件模块

    “Mybatis源码分析之插件模块”是一篇深入剖析Mybatis插件模块的文章。总的来说,Mybatis插件模块的实现流程可以概括为下面四个核心类别:Interceptor、InterceptorChain、Plugin和Invocation。 Interceptor接口:插件必须实现的接口,提供了intercept()方法以便拦截Mybatis的方法调用。…

    Java 2023年6月1日
    00
  • maven springboot如何将jar包打包到指定目录

    以下是 Maven Spring Boot 如何将 Jar 包打包到指定目录的攻略,步骤如下: 第一步:在 Maven pom.xml 文件中添加插件 首先需要在 pom.xml 文件中添加 maven-jar-plugin 插件,然后设置输出目录: <build> <plugins> <plugin> <group…

    Java 2023年5月19日
    00
  • Spring Boot实现登录验证码功能的案例详解

    Spring Boot实现登录验证码功能的案例详解 简介 最近,我在开发一个基于Spring Boot的Web应用程序时,需要实现一个登录验证码功能,以确保用户输入有效并防止暴力破解。在研究后,我发现可以通过添加一些依赖项和编写一些代码来轻松地实现此功能。在本文中,我将与您分享实现登录验证码功能的详细步骤。 步骤 步骤1:添加依赖 为了实现登录验证码功能,我…

    Java 2023年5月20日
    00
  • Spring Boot + Jpa(Hibernate) 架构基本配置详解

    我将为您详细讲解“Spring Boot + Jpa(Hibernate) 架构基本配置详解”的完整攻略。 一、前置条件 在进行Spring Boot + Jpa(Hibernate) 架构的搭建之前,确保您已经安装好了Java和Maven,且熟悉了Spring Boot框架的基本概念和使用方法。 二、添加依赖 1.添加Spring Boot和Jpa(Hib…

    Java 2023年5月19日
    00
  • springboot+springmvc+mybatis项目整合

    一、概述 本文将简要讲解如何使用SpringBoot + SpringMVC + MyBatis这个组合来开发Web应用。这一组合是非常流行的,MyBatis负责ORM,SpringMVC负责MVC框架,SpringBoot则帮助我们快速搭建整个应用。 二、环境搭建 首先,我们需要在本地环境中安装JDK、Maven以及相应的IDE。为了便于快速上手,可以使用…

    Java 2023年5月15日
    00
  • 详解eclipse下创建第一个spring boot项目

    Eclipse 下创建第一个 Spring Boot 项目的完整攻略 在本文中,我们将详细介绍如何在 Eclipse 下创建第一个 Spring Boot 项目。我们将介绍 Spring Boot 的概念、Eclipse 的配置和使用,并提供两个示例。 Spring Boot 概念 Spring Boot 是一个用于创建独立的、生产级别的 Spring 应用…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部