Spring MVC实现文件上传和下载

对于Spring MVC实现文件上传和下载的完整攻略,包含以下几个步骤:

步骤一:添加依赖

从Maven仓库中获取所需的依赖,这里只列出需要的主要依赖:

<!-- 文件上传 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>${commons-fileupload.version}</version>
</dependency>

<!-- 文件下载 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>${commons-io.version}</version>
</dependency>

步骤二:实现文件上传

下面是一个示例代码,其中使用了CommonsMultipartResolver解析文件上传请求。MultipartFile对象代表上传的文件,通过transferTo()方法可以将文件保存到本地磁盘上。

@Controller
@RequestMapping("/upload")
public class FileUploadController {

    // 使用CommonsMultipartResolver解析文件上传请求
    @Autowired
    private CommonsMultipartResolver multipartResolver;

    @PostMapping("/")
    public String handleFileUpload(@RequestParam("file") MultipartFile file) {
        if (multipartResolver.isMultipart(request)) {
            try {
                // 获取文件名,用于在本地磁盘保存文件
                String fileName = file.getOriginalFilename();

                // 如果文件名重复,则在文件名后添加时间戳
                File localFile = new File(fileName);
                int i = 1;
                while (localFile.exists()) {
                    localFile = new File(fileName.split(".")[0] + "_" + i + "." + fileName.split(".")[1]);
                    i++;
                }

                // 保存文件到本地磁盘
                file.transferTo(localFile);

                // 返回上传成功页面
                return "uploadSuccess";
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return "uploadFailure";
    }
}

步骤三:实现文件下载

下面是一个示例代码,其中使用了FileResponse封装了文件下载响应体。FileUtils类来自于“Apache Commons IO”依赖,用于将文件字节流写入到响应体中。

@Controller
@RequestMapping("/download")
public class FileDownloadController {

    @GetMapping("/")
    public ResponseEntity<FileResponse> getFile(@RequestParam("fileName") String fileName) {
        File file = new File(fileName);
        if (file.exists()) {
            try {
                // 使用“Application/octet-stream”指定响应体的媒体类型,表示可任意二进制文件下载
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
                // 将响应体设定为指定文件的字节流
                headers.setContentDispositionFormData("attachment", file.getName());
                // 使用“FileResponse”封装响应体
                FileResponse fileResponse = new FileResponse(FileUtils.readFileToByteArray(file), headers);
                // 返回响应主体
                return new ResponseEntity<>(fileResponse, HttpStatus.OK);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }

    @AllArgsConstructor
    public static class FileResponse {
        private byte[] bytes;
        private HttpHeaders headers;
        // getter and setter...
    }
}

以上就是Spring MVC实现文件上传和下载的完整攻略,若您需要详细了解,可以参考以下两个示例代码,分别对应了文件上传和文件下载功能:

文件上传示例代码:https://github.com/linjiajian999/SpringMVC-FileUpload

文件下载示例代码:https://github.com/linjiajian999/SpringMVC-FileDownload

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

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring Boot 开发私有即时通信系统(WebSocket)

    Spring Boot是一个快速开发框架,可以帮助我们快速构建Web应用程序。在本攻略中,我们将使用Spring Boot和WebSocket创建一个私有即时通信系统。以下是完整攻略: 创建一个Maven项目,并在pom.xml文件添加以下依赖项: <dependency> <groupId>org.springframework.b…

    Java 2023年5月14日
    00
  • Java C++刷题leetcode1106解析布尔表达式

    Java C++刷题leetcode1106解析布尔表达式 问题描述 给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。 有效的表达式需遵循以下约定: “t”,运算结果为 True “f”,运算结果为 False “!(expr)”,运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT) “&…

    Java 2023年5月26日
    00
  • Java的Struts框架报错“ActionServletSecurityException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“ActionServletSecurityException”错误。这个错误通常由以下原因之一起: 安全配置错误:如果安全配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 安全限制:如果安全限制不允许访问,则可能会出现此错误。在这种情况下,需要检查安全限制以解决此问题。 以下…

    Java 2023年5月5日
    00
  • Java设计模式之java桥接模式详解

    Java设计模式之java桥接模式详解 什么是Java桥接模式? Java桥接模式是23种常用的设计模式之一,也称为桥梁模式。它是一个两层结构,其中底层定义了实现,而高层定义了抽象。抽象层通过委托调用实现层中的方法,以实现业务需求。这种模式可以将抽象部分与它的实现部分分离,使它们可以独立地变化。 应用场景 Java桥接模式常用于以下场景: 当需要避免使用由于…

    Java 2023年6月16日
    00
  • JavaWeb 入门篇:创建Web项目,Idea配置tomcat

    JavaWeb 入门篇:创建Web项目,Idea配置tomcat 1. 创建Web项目 首先,在Idea中打开新建项目的界面,选择”Java Enterprise”,稍等片刻,就会出现”Web Application”选项,选择该选项,并填写项目的基本信息,包括项目名称、项目路径、Java版本号、web.xml文件的路径等等。 创建好项目之后,我们需要在项目…

    Java 2023年6月2日
    00
  • SpringBoot MyBatis简单快速入门例子

    下面我为您介绍一下”SpringBoot MyBatis简单快速入门例子”的完整攻略。 1. 概述 Spring Boot 是一种快速开发应用程序的框架,它可以通过简单的配置来启动 Web 应用程序和服务。MyBatis 是一种 Java 持续层框架,它简化了数据库操作的过程。 在本文中,我们将讨论如何在 Spring Boot 中使用 MyBatis 进行…

    Java 2023年5月19日
    00
  • SpringBoot通知机制的实现方式

    SpringBoot通知机制的实现方式 Spring Boot提供了一种简单的机制来发送通知,如邮件、短信等。这种机制主要基于Spring框架的事件机制,可以自定义事件,触发事件,然后响应事件。 1. Spring Boot事件机制简介 Spring Boot事件机制基本框架可以用以下三个类来实现: ApplicationEvent:表示在应用程序中发生的事…

    Java 2023年5月26日
    00
  • 简单讲解奇偶排序算法及在Java数组中的实现

    简单讲解奇偶排序算法及在Java数组中的实现 前言 奇偶排序算法是一种比较容易实现的并行排序算法,适合排序长度不大的数组,与快速排序、归并排序等复杂排序算法相比,奇偶排序算法的时间复杂度虽然不低,但是其易于实现的特点使得其在一些场景中表现出色。 算法原理 奇偶排序算法的思想非常简单:首先对数组中下标为奇数的元素进行升序排序,其次对数组中下标为偶数的元素进行升…

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