Java SpringBoot实现文件上传功能的示例代码

下面是Java SpringBoot实现文件上传功能的详细攻略:

1. 项目依赖

首先需要在SpringBoot项目中引入以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>

其中spring-boot-starter-web是SpringBoot中常用的Web依赖,commons-fileupload是Apache提供的一个文件上传工具。

2. 上传控制器

在SpringBoot中编写文件上传控制器可以非常简单,只需要使用SpringMVC中提供的MultipartFile即可实现文件上传。

@RestController
public class FileUploadController {

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 获取文件类型
        String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
        // 创建文件保存路径
        String filePath = "E:/upload/";
        // 创建文件名
        String newFileName = UUID.randomUUID().toString().replace("-", "") + "." + fileType;
        // 创建文件保存目录
        File dir = new File(filePath);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        // 创建文件保存路径
        File dest = new File(filePath + newFileName);
        // 保存文件
        file.transferTo(dest);
        // 返回文件访问路径
        return "http://localhost:8080/file/" + newFileName;
    }
}

以上控制器会将文件保存到指定路径,并且返回文件的访问路径。

3. 页面展示

为了展示文件上传的效果,可以使用HTML和JavaScript编写一个页面来测试文件上传的功能。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>File Upload</title>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script>
        $(function() {
            // 添加选择文件的按钮点击事件
            $("#btnSelect").click(function() {
                $("#file").click();
            });
            // 添加选择文件改变事件
            $("#file").change(function() {
                // 显示文件名
                var fileName = $("#file").val();
                $("#txtFileName").val(fileName);
                // 显示上传按钮
                $("#btnUpload").show();
            });
        });
        function upload() {
            // 创建FormData对象
            var formData = new FormData();
            // 添加文件
            formData.append("file", $("#file").get(0).files[0]);
            // 发送上传请求
            $.ajax({
                url: '/upload',
                type: 'POST',
                data: formData,
                contentType: false,
                processData: false,
                success: function (data) {
                    // 显示上传结果
                    $("#txtUrl").val(data);
                },
                error: function (XMLHttpRequest, textStatus, errorThrown) {
                    // 显示错误信息
                    alert("上传失败");
                }
            });
        }
    </script>
</head>
<body>
    <div>
        <input type="text" id="txtFileName" readonly="readonly" style="width: 200px" />
        <input type="button" id="btnSelect" value="选择文件" />
        <input type="button" id="btnUpload" value="上传" onclick="upload();" style="display: none" />
    </div>
    <br />
    <div>
        <input type="text" id="txtUrl" readonly="readonly" style="width: 500px" />
    </div>
    <br />
    <div>
        <input type="file" id="file" accept="image/*" style="display: none" />
    </div>
</body>
</html>

以上页面会展示一个选择文件的按钮和一个上传按钮,选择文件后,上传按钮会显示出来,点击上传按钮可以将文件上传到服务器,上传成功后会在页面上显示文件的访问路径。

4. 文件下载

Spring Boot也提供了相应的代码来支持文件的下载功能,我们通过添加一个下载的控制器的方式来支持。

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

    @GetMapping("/{fileName}")
    public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
        // 获取文件路径
        String filePath = "E:/upload/";
        File file = new File(filePath + fileName + ".jpg");
        // 构建HttpHeaders
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", URLEncoder.encode(file.getName(), "UTF-8"));
        // 返回文件流
        return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
    }
}

以上的控制器中通过PathVariable注解,可以从请求路径中获取文件名,并将文件保存的路径固定到“E:/upload/”目录下,最后通过FileUtils将文件保存到ByteArrayOutputStream,并将文件流及HttpHeaders响应到客户端。从而实现文件下载的功能。

以上是Java SpringBoot实现文件上传和下载的示例代码及详细讲解。希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java SpringBoot实现文件上传功能的示例代码 - Python技术站

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

相关文章

  • WIN7系统JavaEE(tomcat7 Eclipse)环境配置教程(二)

    下面我将为你详细讲解“WIN7系统JavaEE(tomcat7 Eclipse)环境配置教程(二)”的完整攻略。 1. 安装JDK JDK是Java EE开发的必备软件,我们需要将其安装到本机上。以下是安装步骤: 1.1. 前往Oracle官网下载Windows版本的JDK,选择适合自己系统的版本下载并进行安装。 1.2. 安装完成后,添加系统环境变量。在系…

    Java 2023年6月2日
    00
  • 搭建MyBatis开发环境及基本的CURD介绍

    关于搭建MyBatis开发环境以及基本的CURD介绍,我们需要以下几步: 安装 Java SE环境 首先需要在本地安装好Java SE环境,通常使用官网提供的JDK安装包进行安装,安装完毕之后可以使用 java -version 命令查看安装是否成功。 安装和配置 Maven Maven是一个Java项目管理工具,可以方便地管理Java项目中的依赖关系和构建…

    Java 2023年6月2日
    00
  • ZIP4j 压缩与解压的实例详解

    ZIP4j 压缩与解压的实例详解 在本文中,我们将使用 Java 的第三方库 ZIP4j 来演示如何进行文件的压缩与解压,并提供了两个示例。 简介 ZIP4j 是一个开源的 Java 库,用于对 ZIP 类型的文件进行压缩和解压操作。它支持密码保护、AES 加密、多卷、易失性操作等功能。 环境 在使用前,我们需要进行相应的环境配置。首先,我们需要下载 ZIP…

    Java 2023年5月20日
    00
  • 深入理解StringBuilder的使用方法

    下面是深入理解StringBuilder的使用方法的攻略。 StringBuilder简介 在Java中,字符串是不可变的对象,每次更改字符串都会创建一个新的字符串对象,导致不必要的内存浪费。而StringBuilder则可以动态地添加、修改、删除字符串内容,不需要创建新的对象,从而提高程序性能。 StringBuilder常用操作方法 构造方法 Strin…

    Java 2023年5月19日
    00
  • Java Web开发之图形验证码的生成与使用方法

    Java Web开发之图形验证码的生成与使用方法 在Java Web开发中,图形验证码是常用的用户验证工具。通过在表单中添加验证码,可以有效防止自动化机器人等非人类恶意行为的攻击。本文将详细介绍Java Web开发中,如何生成和使用图形验证码。 生成图形验证码 生成图形验证码需要使用Java提供的Graphics2D类。其中,需要注意以下几个关键点: 随机生…

    Java 2023年6月15日
    00
  • mybatis plus自动生成器解析(及遇到的坑)

    下面我将为你详细讲解 Mybatis Plus 自动生成器解析及遇到的坑。 1. 简介 Mybatis Plus 是一款基于 Mybatis 的快速开发框架,提供了常用的 CRUD 操作、分页、逻辑删除等功能,大大减少了代码量,提升了开发效率。而其中的代码生成器,更是可以帮助我们一键生成实体、Mapper、Service、Controller 等文件,减少了…

    Java 2023年6月2日
    00
  • idea2020.3测试评价及感受

    IDEA 2020.3测试评价及感受 概述 IntelliJ IDEA 2020.3是一款集成开发环境,旨在提供给Java、Kotlin等开发者使用。本文将深入探讨该版本的测试评价及感受。 安装及配置 在官方网站(https://www.jetbrains.com/idea/)下载.idea2020.3版本软件,然后按照提示进行安装。如若使用社区版则无需激活…

    Java 2023年5月26日
    00
  • SpringBoot基于AbstractRoutingDataSource实现多数据源动态切换

    下面就来详细讲解“SpringBoot基于AbstractRoutingDataSource实现多数据源动态切换”的完整攻略: 什么是AbstractRoutingDataSource Spring中提供了AbstractRoutingDataSource抽象类,该抽象类继承自AbstractDataSource类,用于实现多数据源的动态切换。继承该抽象类并…

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