springboot文件上传大小限制设置

2023-05-16

    一般的web系统基本都会有文件上传功能,文件上传必然涉及到一个问题,就是文件大小,太大的文件不仅传输速度慢,而且对服务器压力巨大,后期的下载和保存都是一种考验。

    所以有了文件大小限制,一般我们在处理上传的接口时,其实就可以判断文件大小,这时候做一个大小判断,不符合要求,直接不保存文件,并返回前端相关提示。这种做法有一个不好的地方,就是如果上传方法重载,或者使用的地方不一样,那么每个方法都需要做这样的大小限制判断。

    springboot使用MultipartFile上传,可以对文件上传大小做限制。直接配置如下所示:

spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=200MB

    这种设置,如果不做额外的处理,的确可以起到作用,但是如果你调用上传接口,上传过大文件,返回的结果可能如下所示:

{
    "timestamp": "2022-04-09T06:39:28.820+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "path": "/test/upload"
}

    这个是springboot通过拦截器做出的返回,而且后台还会打印异常信息。

    有时候,我们希望我们的返回信息跟我们其他的业务逻辑返回一样,就需要自定义一个返回。

    做法很简单,自定义一个BaseController,然后让上传的Controller来继承这个类即可。

package com.example.undertowtest.web;

import io.undertow.server.handlers.form.MultiPartParserDefinition;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartException;

import java.util.HashMap;
import java.util.Map;

@ControllerAdvice
public class BaseController {


    @ResponseBody
    @ExceptionHandler(value = MultipartException.class)
    public Object fileUploadExceptionHandler(MultipartException exception){
        Map<String,Object> map = new HashMap<>();
        map.put("code",500);
        Throwable rootCause = exception.getRootCause();
        if(rootCause instanceof MultiPartParserDefinition.FileTooLargeException){
            map.put("msg","文件太大");
        }
        return map;
    }
}

    这个时候,如果上传过大的文件,那么返回信息如下所示:

{
    "msg": "文件太大",
    "code": 500
}

    这种code,msg可以根据自己的业务定制化,最终前端在处理的时候就可以和其他业务一样处理,而不是去判断status,error等模糊的返回信息。这样,后端也不会打印文件上传的异常堆栈信息。

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

springboot文件上传大小限制设置 的相关文章

随机推荐

  • proteus电路仿真设计图中很多器件之间没有实线连线,它们是怎么实现的?

    如题所示 xff0c 在proteus电路仿真设计图中 xff0c 我们发现 xff0c 电子元器件之间 xff0c 很多时候并没有实线连接 xff0c 但是他们却可以工作 对于新手的我们 xff0c 可能觉着很奇怪 xff0c 独立的器件
  • 七段数码管显示原理研究

    在51单片机学习过程中 xff0c 相对基础的一个实验就是利用七段数码管依次显示数字0 9 很多时候 xff0c 我们按照要求 xff0c 搭建了电路 xff0c 编写了对应的显示控制程序 xff0c 最后运行 xff0c 可能对于七段数码
  • Cloudkitty – OpenStack计费服务

    https mp weixin qq com s biz 61 MzU0NDEyODkzMQ 61 61 amp mid 61 2247494964 amp idx 61 1 amp sn 61 259f86891d8e7bc07debd3
  • 51单片机c语言开发工具keil安装

    单片机分好几种 xff0c 常见的51单片机开发需要安装keil对应c51版本 xff0c 不能安装成了mdk版本 这个需要注意 目前 xff0c 比较好的工具 xff0c windows下自然是keil了 但是它是收费的 xff0c 只能
  • 仿真软件proteus构建LCD1602显示字符串实验

    LCD1602模块的显示需要注意几点 xff1a 1 显示两行 xff0c 第一行的起始地址是0x80 xff0c 第二行的地址是0x80 43 0x40 61 0xC0 2 RS RW EN接线没有说一定要接到P1 P2 P3上 xff0
  • 仿真软件proteus点亮led实验

    在这个实验之前 xff0c 确保系统已经正确安装了proteus和keil工具 proteus是用来设计电路图的 xff0c keil是用来编写c语言代码并编译成芯片可用的hex程序的 前面安装keil的时候 xff0c 最后提到 xff0
  • 仿真软件proteus构建七段数码管显示数字0-9实验

    七段数码管显示原理研究在前一篇博客中已经阐述过 xff0c 就是利用7个数码管构建一个 8 字形 xff0c 然后利用数字的形状特点 xff0c 依次点亮某一些段 xff0c 就可以显示数字了 七段数码管显示数字还是二极管发光原理的利用 这
  • 仿真软件proteus构建LCD1602四线驱动实验

    默认的LCD1602都是8线驱动 xff0c 数据口D0 D7都要接线 xff0c 这种方式对于写数据而言 xff0c 很方便 xff0c 不需要考虑太多 但是因为要的数据线过多 xff0c 在实际布线过程中 xff0c 可能会考虑使用四线
  • 液晶显示屏LCD1602直连STC89C52RC单片机程序

    我买的普中 2单片机类型开发板 xff0c 单片机自带有一排插槽 xff0c 是留给LCD1602显示用的 虽然这个插槽正好可以连接上LCD1602 xff0c 但是因为他的引脚特殊性 xff0c 有三个引脚 xff0c RW RS EN需
  • 记录一次单片机芯片插反通电故障

    昨天晚上在家里捣鼓单片机最小系统 xff0c 把开发板上的芯片从卡座上拆下来 xff0c 然后放在面包板上diy最小系统 xff0c 后来放回去 但是我只记着芯片有缺口的地方朝上 xff0c 并没有记住它从卡座上卸载下来的方向 xff0c
  • mac系统安装win10双系统

    一个月前 xff0c 为了在家里学习单片机 xff0c 在mac book air系统基础上 xff0c 安装了win10 xff0c 搞了一个双系统 在安装之前 xff0c 看了很多资料 xff0c 基本上提到两点 xff0c 一个是准备
  • 谐振电路应用之LED交替闪烁

    谐振电路主要利用三极管特性 xff0c 让电路持续交替出现高低电平的现象 xff0c 根据这个特点 xff0c 可以制作LED交替闪烁的效果 谐振电路图如下所示 xff1a 根据这个图 xff0c 可以很方便的利用三极管 xff0c 电阻
  • Python基础-TypeError:takes 2 positional arguments but 3 were given

    Error xff1a 今天写一段简单类定义python代码所遇到报错问题 xff1a TypeError drive takes 2 positional arguments but 3 were given 代码如下 class Car
  • node使用netcat依赖库做socket编程

    node编程里面 xff0c 默认有一个net库可以做socket编程 xff0c 这里要说的是netcat这个库 xff0c 思路都是一样的 xff0c 甚至代码逻辑都很像 netcat可以支持tcp udp xff0c 同时很方便的构造
  • 荔枝派nano初体验-windows写入镜像到TF卡启动

    荔枝派nano是一个很小的系统 xff0c 搭载全志F1C100S芯片 xff0c 具有ddr内存 xff0c 支持tf flash启动 本人在了解荔枝派的特点之后 xff0c 在淘宝上找到了一个57块钱的荔枝派nano xff0c 一般价
  • linux下socket编程中setsockopt的作用

    如题所示 xff0c 在linux进行socket编程的时候 xff0c 一般而言 xff0c socket bind listen三步曲之后 xff0c 就开始接收客户端请求 xff0c 然后实现收发数据 如下所示的代码 xff0c 是没
  • 悲观锁与乐观锁以及如何用java语言和mysql实现

    悲观锁 xff0c 乐观锁跟字面意思一样 xff0c 悲观锁认为在多线程场景下 xff0c 不一定能够获取资源 xff0c 所以要先获取锁 xff0c 再做相关业务 xff0c 保证不会发生冲突 乐观锁认为多线程场景下 xff0c 不会发生
  • opencv结合微信二维码识别功能实现图片二维码识别

    opencv本身有二维码识别功能 xff0c 但是识别效果不是很好 xff0c 它对二维码图片要求较高 xff0c 虽然可以有图片处理 xff0c 甚至抠出二维码区域 xff0c 但是整体识别与微信二维码识别功能还是有差距的 微信二维码识别
  • opencv for java给图片添加水印中文问题

    opencv提供的给图片添加文字的方法Imgproc putText 可以给图片添加文字 xff0c 最后类似一个添加水印的效果 xff0c 但是这个方法对中文支持不好 xff0c 在没有字体支持的情况下 xff0c 默认中文显示 如下图所
  • springboot文件上传大小限制设置

    一般的web系统基本都会有文件上传功能 xff0c 文件上传必然涉及到一个问题 xff0c 就是文件大小 xff0c 太大的文件不仅传输速度慢 xff0c 而且对服务器压力巨大 xff0c 后期的下载和保存都是一种考验 所以有了文件大小限制