SpringBoot 文件或图片上传与下载功能的实现

接下来我将详细讲解 SpringBoot 文件或图片上传与下载功能的实现攻略。

1. 文件上传

1.1 前端实现

前端代码中需要添加一个上传文件的表单及其相关事件处理。可以使用HTML5自带的 FormData 类,一步步向后台传输数据。代码示例如下:

<form id="fileUploadForm">
  <input type="file" name="upfile"/>
  <input type="button" value="上传" onclick="upload()"/>
</form>
function upload() {
  var formData = new FormData($('#fileUploadForm')[0]);
  $.ajax({
    url: "/upload",
    type: "POST",
    data: formData,
    processData: false,
    contentType: false,
    success: function (data) {
      alert('上传成功!');
    },
    error: function () {
      alert('上传失败!');
    }
  });
}

1.2 后端实现

在 SpringBoot 中,我们可以使用 Spring MVC 的注解来实现上传文件的功能。可以使用 @RequestParam 注解与 MultipartFile 类来接收前端传来的文件。代码示例如下:

@PostMapping("/upload")
public String upload(@RequestParam("upfile") MultipartFile file,
                     RedirectAttributes redirectAttributes) {
    if (file.isEmpty()) {
        redirectAttributes.addFlashAttribute("message", "请选择一个文件进行上传。");
        return "redirect:/uploadStatus";
    }

    try {
        byte[] bytes = file.getBytes();
        String fileName = file.getOriginalFilename();
        Path path = Paths.get(UPLOAD_FOLDER + fileName);

        // 文件保存到本地
        Files.write(path, bytes);

        redirectAttributes.addFlashAttribute("message",
                "文件 " + fileName + " 上传成功。");

    } catch (IOException e) {
        e.printStackTrace();
    }

    return "redirect:/uploadStatus";
}

其中,我们可以使用 Files.write() 方法将文件保存到本地。UPLOAD_FOLDER 变量是存储上传文件的文件夹路径。

2. 文件下载

2.1 前端实现

前端代码中需要添加一个下载文件的链接,点击此链接时会向后台请求下载该文件。代码示例如下:

<a href="/download?filename=xxx.xxx">下载文件</a>

2.2 后端实现

在 SpringBoot 中,我们可以使用 HttpServletResponse 的方法来实现下载文件的功能。如下代码示例中,我们可以使用 FileInputStream 读取文件,并使用 HttpServletResponse 的 setContentType() 和 setHeader() 方法来设置下载的文件格式与文件名。最后,将文件以流的方式写入 HttpServletResponse 中,实现文件下载。

@GetMapping("/download")
public void downloadFile(HttpServletRequest request, HttpServletResponse response) {
    String fileName = request.getParameter("filename");
    String filePath = UPLOAD_FOLDER + fileName;

    File file = new File(filePath);
    if (!file.exists()) {
        OutputStream outputStream = null;
        try {
            outputStream = response.getOutputStream();
            response.setContentType("text/html; charset=UTF-8");
            outputStream.write("文件不存在!".getBytes());
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                outputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return;
    }

    try (
        InputStream inputStream = new FileInputStream(file);
        OutputStream outputStream = response.getOutputStream()
     ) {
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) > 0) {
            outputStream.write(bytes, 0, len);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
}

以上就是 SpringBoot 文件或图片上传与下载功能的实现攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 文件或图片上传与下载功能的实现 - Python技术站

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

相关文章

  • c#批量整理xml格式示例

    C#批量整理Xml格式示例攻略 在进行Xml数据处理时,经常需要将Xml文档格式化整理以便于阅读。这里提供C#代码示例,将目录中所有的Xml文件都进行格式化整理。 流程 获取目录下的所有Xml文件。 循环遍历每个Xml文件,读取内容并进行格式化处理。 将处理后的内容写回到原文件中。 代码示例 using System; using System.IO; us…

    html 2023年5月30日
    00
  • java dom4j解析xml文件代码实例分享

    Java dom4j解析XML文件代码实例分享 本文将介绍如何使用dom4j库解析XML文件,并提供两个示例,一个用于解析XML文档的结构,另一个用于解析XML文件的内容。 准备工作 首先,需要在项目中添加dom4j库的依赖,可以使用Maven或手动添加jar包的方式。 <dependency> <groupId>dom4j</…

    html 2023年5月30日
    00
  • t3出行怎么打出租车? t3出行app打车与付款的方法

    以下是“t3出行怎么打出租车? t3出行app打车与付款的方法”的完整攻略: t3出行怎么打出租车? t3出行app打车与付款的方法 t3出行是一款非常流行的打车软件,用户可以在软件中轻松打车、付款等操作。下面是t3出行打车与付款的具体方法。 步骤1:下载并安装t3出行app 用户需要在手机应用商店中搜索“t3出行”,下载并安装该应用程序。 步骤2:注册并登…

    html 2023年5月18日
    00
  • PHP aes (ecb)解密后乱码问题

    以下是 “PHP aes(ecb)解密后乱码问题”的完整攻略。 首先梳理问题 “PHP aes(ecb)解密后乱码问题” 是指,在使用 PHP 进行 aes-ecb 解密时,解密出来的数据出现乱码的问题。 排查问题原因 检查密钥是否正确。 aes 解密需要密钥,如果密钥错误,会导致解密后的数据与原数据不同,从而出现乱码。 检查解密模式是否正确。 aes 有多…

    html 2023年5月31日
    00
  • 盘古越狱ios8.1怎么安装cydia? ios8.1完美越狱兔兔助手安装cydia方法

    以下是盘古越狱iOS 8.1安装Cydia的攻略: 下载盘古越狱工具:首先,您需要下载并安装盘古越狱工具。您可以在官方网站上下载安装包,然后按照安装向导进行安装。 连接设备:在安装完成后,将您的iOS设备连接到计算机上。确保您的设备已经启用了USB调试模式,并且您的计算机已经安装了设备驱动程序。 运行盘古越狱工具:在连接设备后,运行盘古越狱工具。在工具中,您…

    html 2023年5月17日
    00
  • 网站建设中怎么打造亮点

    以下是“网站建设中怎么打造亮点”的完整攻略: 网站建设中怎么打造亮点? 在网站建设中,打造亮点可以吸引用户的注意力,提高用户的体验和满意度。以下是一些关于如何打造亮点的技巧和步骤,可以帮助用户更好地建设网站。 技巧1:设计独特的页面布局 在网站建设中,设计独特的页面布局可以吸引用户的注意力。用户可以使用不同的颜色、字体、图片等元素来设计页面布局,以便更好地突…

    html 2023年5月18日
    00
  • 详解MyBatis XML配置解析

    详解MyBatis XML配置解析 什么是MyBatis XML配置? MyBatis XML配置是通过一个XML文件来配置MyBatis的,主要内容包括数据库连接信息、映射文件信息、插件信息等。 MyBatis XML配置解析 数据库连接信息配置 <configuration> <!–数据库连接信息–> <environm…

    html 2023年5月30日
    00
  • Mybatis代码生成器Mybatis Generator(MBG)实战详解

    Mybatis Generator(MBG)实战详解 Mybatis Generator(简称MBG)是一个基于Mybatis框架的代码生成器。MBG可以帮助开发者快速生成DAO(Data Access Object)层的代码。本文将详细讲解MBG的使用方法,力求使初学者也能轻松上手。 安装MBG MBG可以通过Maven直接引入。在项目的pom.xml中加…

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