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日

相关文章

  • Java读取TXT文件内容的方法

    下面是“Java读取TXT文件内容的方法”的完整攻略: 步骤一:确定文件路径 首先需要确定要读取的TXT文件的路径。文件路径可以是绝对路径或相对路径。如果是相对路径,则需要注意当前程序的工作目录,以确保能正确地找到文件。 步骤二:创建File对象 了解了文件路径之后,就要创建一个File对象。在Java中,File类表示磁盘上的文件或目录。可以使用File类…

    Java 2023年5月20日
    00
  • Java实现数组翻转的实现代码

    下面我就来详细讲解“Java实现数组翻转的实现代码”的完整攻略,步骤如下: 步骤一:确定翻转范围 要实现数组翻转,首先需要确定翻转的范围,包括需要翻转的起始和结束位置。 这里我们假设要翻转的数组为arr,数组长度为n。如果要将整个数组翻转,起始位置设为0,结束位置为n-1。如果只需要翻转数组的一部分,可以根据具体需求指定起始和结束位置。 步骤二:交换元素位置…

    Java 2023年5月26日
    00
  • 纯Java代码实现流星划过天空

    下面是纯Java代码实现流星划过天空的完整攻略。 步骤一:实现画布 首先需要使用Java的GUI库,比如Swing或JavaFX,来创建一个窗口,并在窗口上绘制流星。 使用JavaFX实现画布 import javafx.application.Application; import javafx.scene.Group; import javafx.sce…

    Java 2023年5月26日
    00
  • SpringMVC集成FastJson使用流程详解

    SpringMVC集成FastJson使用流程详解 FastJson是阿里巴巴开源的一个JSON解析库,它可以将Java对象转换为JSON格式的字符串,也可以将JSON格式的字符串转换为Java对象。在SpringMVC中,我们可以使用FastJson来处理JSON格式的数据。本文将详细讲解SpringMVC集成FastJson的使用流程,并提供两个示例说明…

    Java 2023年5月17日
    00
  • mybatis-plus 如何操作json字段

    mybatis-plus 支持操作 JSON 数据类型,官方文档也提供了详细的使用说明,下面我来具体讲解如何操作 JSON 字段的完整攻略,包括如何插入、修改、查询和删除 JSON 数据。 1. 插入 JSON 数据 插入 JSON 数据可以使用 MyBatis-Plus 提供的 com.baomidou.mybatisplus.extension.hand…

    Java 2023年5月26日
    00
  • java 之JNA中的Memory和Pointer的使用方法

    Java中JNA中的Memory和Pointer的使用方法 什么是JNA? JNA是Java Native Access的简称,它是一个Java库,用于调用Native代码。它通过使用Java的动态代理机制调用Native代码,支持Windows,Linux和Mac等操作系统,且完全无需编写任何C/C++代码。 为什么需要使用JNA? 在Java中无法直接调…

    Java 2023年5月26日
    00
  • spring声明式事务解析

    下面我来为你详细讲解 Spring 声明式事务解析的完整攻略。 什么是 Spring 声明式事务 Spring 声明式事务即通过在代码中添加注解或 XML 配置等方式,在事务方法上声明事务的处理方式,使得 Spring 在运行代码时能够自动使用声明的事务进行工作。 Spring 声明式事务的主要优点如下: 简化代码,分离关注点,使得业务实现更加清晰。 提高代…

    Java 2023年5月20日
    00
  • Mybatis新手教程之简单入门

    Mybatis是一个支持基于XML或注解的SQL语句编写和执行的轻量级开源框架,本文将会详细介绍Mybatis的入门使用,让新手能够轻松掌握该框架的使用方法。 步骤一:导入Mybatis依赖 在使用Mybatis前,需要在项目中引入相关的依赖。可以通过Maven等构建工具来导入以下两个MyBatis相关的jar包: <dependency> &l…

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