SpringBoot文件上传-单文件与多文件上传的使用

2023-11-04

在Spring Boot中,文件上传可以使用MultipartFile来处理。下面将为你演示如何进行单文件和多文件上传。

一、单文件上传

1.1 首先,你需要创建一个表单界面来选择和上传单个文件。在HTML中,你可以使用类似于下面的表单:

<form method="POST" action="/upload" enctype="multipart/form-data">
  <input type="file" name="file">
  <button type="submit">上传</button>
</form>

enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。

默认地,表单数据会编码为 “application/x-www-form-urlencoded”。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值) 

描述
application/x-www-form-urlencoded 在发送前编码所有字符(默认)
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
text/plain 空格转换为 “+” 加号,但不对特殊字符编码。

1.2 接下来,在你的控制器中,你可以使用MultipartFile参数来处理上传的文件。例如,你可以创建一个POST请求处理方法来处理文件上传:

1.2.1 使用transferTo()方法将上传的文件保存到指定的位置

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

// ...

@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
    // 检查文件是否为空
    if (!file.isEmpty()) {
           //获得文件原始名称
        String originalFilename = file.getOriginalFilename();
            //使用transferTo()方法将上传的文件保存到指定的位置
        file.transferTo(new File("H:\\cache\\"+originalFilename));       

    }

    return "文件上传成功!";
}

1.2.2 使用Files.write()方法将文件写入指定路径。

@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) {

    // 保存文件到服务器
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                // 这里可以自定义文件保存路径和文件名
                Path path = Paths.get("uploads/" + file.getOriginalFilename());
                Files.write(path, bytes);
            } catch (IOException e) {
                e.printStackTrace();
         }
 
    }

    return "文件上传成功!";
}

二、多文件上传

如果你想要实现多文件上传,只需稍作调整即可。在表单中,你可以使用multiple属性来允许选择多个文件:

<form method="POST" action="/upload" enctype="multipart/form-data">
  <input type="file" name="files" multiple>
  <button type="submit">上传</button>
</form>

然后,在你的控制器中,你可以使用MultipartFile[]参数来处理多个文件的上传。例如:

2.1 使用transferTo()方法将上传的文件保存到指定的位置:

@PostMapping("/upload")
public String handleFileUpload(@RequestParam("files") MultipartFile[] files) {
    if(files.length > 0){
            for (MultipartFile file: files) {
                if(!file.isEmpty()){
                    String originalFilename = file.getOriginalFilename();
                    file.transferTo(new File("H:\\cache\\"+originalFilename));
                }
            }


    return "文件上传成功!";
}

 2.2 使用Files.write()方法将文件写入指定路径。

@PostMapping("/upload")
public String handleFileUpload(@RequestParam("files") MultipartFile[] files) {
    // 检查文件是否为空
    if (files.length == 0) {
        return "请选择至少一个文件进行上传.";
    }

    // 保存文件到服务器
    for (MultipartFile file : files) {
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                // 这里可以自定义文件保存路径和文件名
                Path path = Paths.get("uploads/" + file.getOriginalFilename());
                Files.write(path, bytes);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    return "文件上传成功!";
}

三、总结

尽管使用transferTo()方法也可以实现文件保存,但在Spring Boot中,更推荐使用Files.write()方法来代替,因为它提供了更多的灵活性和错误处理机制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot文件上传-单文件与多文件上传的使用 的相关文章

随机推荐

  • GP 常用数学函数

    1 1 绝对值函数 select abs 15 2 结果 15 2 1 2 开立方根 select cbrt 64 0 结果4 1 3 向上取整 select ceil 2 8 结果3 1 4 取商函数 select div 10 3 结果
  • 经典的笔试题解析:内存泄漏问题忘记free与非法访问的问题

    对于 高质量C C 编程 想必这个已经是早已成名的经典书籍了 在此 笔者借用两三个题目 在之前笔者就已经拙作两篇 有兴趣的各位老铁 可以进行欣赏一下啦 1 经典的笔试题解析 高质量C C 编程 链接为 经典的笔试题解析 高质量C C 编程
  • 编程辅助插件BitoAI使用指南(以VSCode开发环境为例安装并使用BitoAI插件从而提高生产效率)

    2023年是AI爆发元年 已经被各种AI工具 新闻轰炸了几个月 只有一种感觉 时间不够用 本文介绍编程辅助神器 Bito AI 本插件使用与ChatGPT相同的模型 目前免费 且拥有强大的辅助能力 可以数倍提升程序开发能力 并大大提高开发效
  • Python-re模块-正则表达式模块常用方法

    re模块介绍 Python的re模块提供了正则表达式的功能 可以用来进行高级的字符串匹配和处理 re模块的主要功能包括 编译正则表达式 使用re compile 可以编译正则表达式字符串 生成正则表达式对象 匹配字符串 使用正则表达式对象的
  • 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(三)

    2021年全国职业院校技能大赛 大数据技术与应用 模拟赛题 三 文章适合了解大数据技术与应用技能大赛 赛题 文章在编写过程中难免有疏漏和错误 欢迎大佬指出文章的不足之处 更多内容请点进 Lino White 查看 未来的世界充满着各式各样的
  • 数据清洗规则

    数据清洗主要针对四种情况 1 缺失值 2 重复值 3 异常值 4 无用值 1 缺失值处理 重要性高 缺失率低 通过计算来填充 重要性高 缺失率高 可以从其他渠道数据进行补充 或者相关数据进行计算得出 重要性低 缺失率高 不处理或简单填充 重
  • 报错ReferenceError: Cannot access ‘xxxx‘ before initialization解决方案

    ReferenceError Cannot access xxxx before initialization 报这个错的原因其实就是和你声明的变量有关 我们都知道var存在变量提示 但是其实const和let在某种意义上也是存在变量提升的
  • Lua脚本学习

    1 介绍 Lua是一种轻量级的脚本语言 具有以下特点 简单易学 Lua语法简单 易于学习和使用 高效性 Lua的解释器非常快 可以在很短的时间内执行大量的代码 可嵌入性 Lua可以嵌入到其他应用程序中 作为脚本语言使用 可扩展性 Lua可以
  • 每日一题-错误的集合

    错误的集合 题目 示例 解题 题目 集合 s 包含从 1 到 n 的整数 不幸的是 因为数据错误 导致集合里面某一个数字复制了成了集合里面的另外一个数字的值 导致集合 丢失了一个数字 并且 有一个数字重复 给定一个数组 nums 代表了集合
  • Qt之电子时钟

    进一步认识Qt中的属性 我们现在再做一个小练习 去实现一个简易版电子时钟的效果 效果展示 新建项目 我们创建了lcdclock2类 其实是没有用到的 实际上是添加新一个C 文件来实现电子钟 添加C 文件 代码 clock h ifndef
  • 二进制、十进制、八进制、十六进制 各代表的英文字母是什么

    二进制是Binary 简写为B八进制是Octal 简写为O十进制为Decimal 简写为D十六进制为Hexadecimal 简写为H
  • 蓝桥杯第十一届省赛题解(Python)

    第一题 不出意料的签到题 遍历 法一 ans 0 for i in range 1 2021 for j in str i if j 2 ans 1 print ans 法二 s 0 for i in range 1 2021 s str
  • 经典的机器学习方面源代码库

    编程语言 搞实验个人认为当然matlab最灵活了 但是正版很贵 但是更为前途的是python numpy scipy matplotlib 和C C 这样组合既可搞研究 也可搞商业开发 易用性不比matlab差 功能组合更为强大 个人认为
  • IDEA比较两个jar包

    比较两个jar包是否一致 To compare two jar files select them in the Project view and press D 如需比较两个jar包 可以在Project视图里面选中他们 按 common
  • CMake项目使用ctest+gtest进行单元测试

    随着CMake工具越来越强大便捷 越来越多的C C 项目转而使用CMake来进行编译管理 它还提供了用于测试的ctest命令来执行项目中编写的单元测试 本文就以一个实例来介绍如何使用ctest来进行单元测试 一 环境准备 本文实例环境VSC
  • 数据结构与算法-实验1链表的建立与操作

    实验目的 掌握链表数据结构的建立及操作 实验重点 利用链表的原空间进行链表的反转 实验内容 设计一个将输入数据建立成链表 并依次输出链表数据 利用原空间把链表反转的程序 实验步骤 掌握链表的数据结构 建立空链表 用头插法向链表插入数据 实验
  • Ubuntu 操作系统学习笔记之c/c++开发环境配置

    ubuntu下的c c 环境搭建是比较简单 因为有apt和新立得的帮助 1 首先是配置gcc 在ubuntu安装完成已经有gcc了 gcc是由GNU之父Stallman所开发的linux下的编译器 全称为GNU Compiler Colle
  • 操作系统-内存管理习题

    题干 在页式存储管理中 假设作业的地址为16位 页长为4KB 作业的第0 1 2逻辑页分别放在内存的第5 10 11物理块中 试计算作业中逻辑地址2F6AH 0E3CH 526CH 十六进制数 相对应的内存物理地址 说明转换过程 写出转换结
  • 芯片的本质是什么?(2)为什么是半导体材料

    为什么是半导体材料 我们知道 芯片用的是半导体材料 可为什么是半导体呢 一句话概括 因为只有半导体才能 用电控制电 在半导体之前 人类只能用机械控制电 比如 电报的工作原理 是通过滴滴滴哒哒哒的机械开关 控制电流的导通和断开 从而将信息传递
  • SpringBoot文件上传-单文件与多文件上传的使用

    在Spring Boot中 文件上传可以使用MultipartFile来处理 下面将为你演示如何进行单文件和多文件上传 一 单文件上传 1 1 首先 你需要创建一个表单界面来选择和上传单个文件 在HTML中 你可以使用类似于下面的表单