Spring Boot的文件上传

2023-10-30

Spring Boot的文件上传并不需要单独进行。当前端进行请求时,所要上传的文件作为请求的一个参数即可,与其他类型参数相同。服务端接收时,只需要对这个文件参数使用MultipartFile类型接收即可。

由于文件上传的参数无法直接拼接到URL中,所以只能是post请求。

如图,用postman来测试,使用post请求,在body中共传入3个参数:

  • photo:图片文件。类型为File,Value选择本地的文件。
  • param0:字符串。
  • param1:字符串。

对于服务端,接收前端传入的这3个参数:

@RequestMapping(value = "/upload")
public Boolean upload(@RequestParam("photo") MultipartFile file, @RequestParam("param0") String param0,  @RequestParam("param1") String param1) {
    if (file == null) return false;
    try{
        String basePath = "D:/save/";
        FileInputStream fileInputStream = (FileInputStream) (file.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(basePath + file.getOriginalFilename()));
        byte[] bs = new byte[1024];
        int len;
        while ((len = fileInputStream.read(bs)) != -1) {
            bos.write(bs, 0, len);
        }
        bos.flush();
        bos.close();
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
    return true;
}

如上,使用MultipartFile接收文件,使用两个String来接收param0和param1。

然后操作File保存到本地即可。

 

通常的文件处理思路是:将文件保存在本地,其基础路径保存在配置文件中,同时要在tomcat中对该路径进行映射。然后将扩展路径和文件名保存在数据库中。当前端进行请求时,从数据库中取出扩展路径信息,发送给前端。前端将扩展路径与项目路径进行拼装来访问。

例如,服务端的地址为192.168.x.xx:8030,工程名为Template,图片的保存路径是D:/test/文件夹:

1.在Spring Boot中配置basePath

basePath = D:/test/

2.打开Tomcat的server.xml,在<Host>标签下添加一个<Context>标签用于映射:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">

       <Context debug="0" docBase="D:/test" path="/Template/photo" reloadable="true"/>

       ...

</Host>

其作用是将docBase映射到path。这样,当访问Tomcat的path下的文件时,Tomcat就会去docBase下寻找该文件并返回。

3.前端向服务端发送请求并上传文件hello.jpg

4.服务端收到前端请求,将前端上传的文件以MultipartFile接收,然后希望保存在分类的文件夹下,例如:

D:/test/2018/11/hello.jpg

其中basePathD:/test/,所以扩展路径为2018/11/hello.jpg。扩展路径需要保存在数据库中。

服务端将接收到的MultipartFile以流的形式保存到D:/test/2018/11/hello.jpg。然后将2018/11/hello.jpg存入数据库。

5.前端向服务端请求图片。

6.服务端从数据库中取出图片扩展路径,为2018/11/hello.jpg。然后将该路径返回给前端。

7.前端收到扩展路径2018/11/hello.jpg,将服务端路径与扩展路径进行拼装,为:

192.168.x.xx:8030/Template/photo/2018/11/hello.jpg

然后使用该路径请求图片。

8.Tomcat收到请求,根据设置的映射路径,将包含/Template/photo在内的左侧路径转换为D:/test,于是图片地址变为D:/test/2018/11/hello.jpg。这样Tomcat就准确地取到了路径,并返回给前端。

 

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

Spring Boot的文件上传 的相关文章

随机推荐

  • AWVS 15.6 使用教程

    目录 介绍 版本 AWVS具有以下特点和功能 功能介绍 Dashboard功能 Targets功能 Scans功能 Vulnerabilities功能 Reports功能 Users功能 Scan Profiles功能 WAFs功能 Pro
  • 英语音标表、48个国际音标发音表、falsh音标学习视频

    随着时代的进步 世界变得越来越小了 掌握一门外语是必不可少的 其中英语是目前使用最广泛的语言 英语音标 则是掌握英语发音的基础 通过本站英语音标表 falsh音标学习 希望对您有帮助 音标发音表 鼠标移到音标上 稍停留 即发音 48个国际音
  • C语言中getchar()函数的详解

    文章目录 关于getchar 函数的基本作用 getchar 函数基本案例 在循环当中的getchar getchar 函数的作用 清理缓冲区中多个字符 关于getchar 函数的基本作用 getchar 函数顾名思义就是获取一个字符 那么
  • 避坑之路 —— 前后端 json 的注意问题

    当我们在进行开发项目的时候 在前后端需要进行数据之间的传输 那么就会需要到json 而json算是字符串中的一种 1 先说一下前端的 其实这两种都是表示前端希望能收到后端json这样的数据格式 那么我们在后端就需要注意将数据进行转换为jso
  • 透视Matplotlib核心功能和工具包 - Cartopy工具包

    Cartopy是用于在Matplotlib上绘制地理地图的第三方工具包 Cartopy具有各种各样的功能 可以满足许多不同的用户群体 在这里 我们将尝试介绍企业中通常使用的大多数功能 地理地图以经度和纬度绘制 均以度为单位 经度绘制在x轴上
  • Qt编程基础

    一 信号与槽 1 什么是信号与槽 信号和槽是用于对象之间的通信 它是Qt的核心机制 在Qt编程中有着广泛的应用 如果想学好Qt 一定要充分掌握信号的槽的概念与使用 2 信号和槽的代码实例 在Qt中 发送对象 发送的信号 接收对象 槽可以通过
  • ISP(三) 硬阈值函数(Hard Thresholding)与软阈值函数(Soft Thresholding)的区别

    一旦明白 其实简单至极 也就那么回事 常用的软阈值函数 是为了解决硬阈值函数 一刀切 导致的影响 模小于3sigma的小波系数全部切除 大于3sigma全部保留 势必会在小波域产生突变 导致去噪后结果产生局部的抖动 类似于傅立叶变换中频域的
  • 日历插件美化版

    https ext dcloud net cn plugin id 3324
  • 服务器显卡:驱动高性能计算和人工智能应用

    一 引言 随着高性能计算和人工智能应用的不断发展 服务器显卡的性能显得越来越重要 服务器显卡是服务器硬件配置中的一个关键组件 它不仅提供基本的图形渲染能力 还在高性能计算和人工智能应用中发挥着重要作用 本文将探讨服务器显卡的重要性和发展趋势
  • 使用ESP8266 12-E板载的CH340对ESP01-s进行烧录

    先借两张图 因为ESP01 S的烧录器找不到了 临时用ESP8266 12 E板载的CH340对ESP01 s进行烧录 1 12 E的EN引脚接地G 2 ESP01 s的3v3连接12 E的3v3 3 ESP01 s的GND连接12 E的G
  • 【左神算法课学习笔记】动态规划

    左神算法课学习笔记 动态规划 动态规划是对暴力递归算法的优化 主要是通过数组记录的方法 优化掉一些重复计算的过程 总结下动态规划的过程 1 抽象出一种 试法 递归解决问题的方法 很重要 2 找到 试法 中的可变参数 规划成数组表 可变参数一
  • 蓝桥杯官网练习题(李白打酒)

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 话说大诗人李白 一生好饮 幸好他从不开车 一天 他提着酒壶 从家里出来 酒壶中有酒2斗 他边走边唱 无事街上走 提壶去打酒 逢店加一倍 遇花喝一斗 这一路上
  • 查看python环境路径_查看python环境的一些知识点

    1 查看python中的查找模块的路径import sys sys path usr bin usr lib64 python26 zip usr lib64 python2 6 usr lib64 python2 6 plat linux
  • CDC处理——异步FIFO

    1 异步FIFO原理 请看 硬件架构的艺术 笔记 三 3 8节 异步FIFO 2 格雷码传递FIFO读写指针 回环特性 通常情况下 设计的异步FIFO的深度是2的N次方 但事实上 选择这个2 N的原因也是因为格雷码这么取的时候 最大值 1回
  • S4 MB5B 结算库存数量与 MMBE 中的数量不同

    用户在查询库存过程中发现MB5B 结算库存数量与 MMBE 中的数量不同 我们知道MMBE是系统的当前库存 MB5B是可以根据输入的日期查询输入日期当天的库存 MMBE查询库存数量为971米 再来看MB5B库存 输入物料 工厂 日期为今天2
  • 在Windows10上安装虚拟机---VMware 17 Pro下载与安装

    在Windows10上安装虚拟机 VMware下载与安装 0 前言 1 下载VMware 17 pro 2 安装VMware 17 Pro 3 打开Vmware 0 前言 电脑原生系统 Windows10 虚拟机软件 VMware 17 p
  • ORACLE随机查询

    1 select from select from tablename order by dbms random value where rownum lt N 注 dbms random是一个可以生成随机数值或者字符串的程序包 value
  • 训练模型的3种方法

    公众号后台回复关键字 Pytorch 获取项目github地址 Pytorch没有官方的高阶API 一般通过nn Module来构建模型并编写自定义训练循环 为了更加方便地训练模型 作者编写了仿keras的Pytorch模型接口 torch
  • STM8普通定时器中断使用寄存器版本

    本文章只讲如何使用STM8的普通定时器 原理以及其他知识点可以网上查阅相关的资料 废话不多说 直奔主题 第一步 了解TIM4的时钟来源 查阅书册可以知道TIM4的时钟来源系统的主时钟 第二步 初始化相关寄存器 从ST官方手册可以知道 TIM
  • Spring Boot的文件上传

    Spring Boot的文件上传并不需要单独进行 当前端进行请求时 所要上传的文件作为请求的一个参数即可 与其他类型参数相同 服务端接收时 只需要对这个文件参数使用MultipartFile类型接收即可 由于文件上传的参数无法直接拼接到UR