上传文件大小限制报错

做了一个上传文件的功能,前端通过文件流程的形式调用后台接口。几百k的文件能成功,几M的文件会失败。原因有二

第一是被nginx限制,请求也无法转发到应用服务器里面(也就是tomcat看不到请求日志只有nginx日志能看到请求)。如果nginx没有配置则默认是1M, 超过就会报错413 Request EntityToo Large。
解决方法:去nginx的conf目录下,编辑nginx.conf文件里面的http{},在里面添加一行配置如下

http{
	client_max_body_size 100m; # 添加这一行,限制文件上传大小为100M
}

如果已设置了,看下是不是值设置的太小了,按需改大即可。最后要重启一下nginx使得生效。(建议放http里面,全局有效,免得哪天又又幺蛾子出现了)

设置到http{}内,控制全局nginx所有请求报文大小
设置到server{}内,控制该server的所有请求报文大小
设置到location{}内,控制满足该路由规则的请求报文大小

第二是 项目框架限制。比如springboot的MultipartFile,它也默认限制了上传的文件大小是1M左右。解决方法跟nginx类似。先看后台上传接口

@ResponseBody
@RequestMapping("/upload")
public String getToken(@RequestPart("multfile") MultipartFile multfile){
	// 业务代码 略
}

先看注解 @RequestPart 和 @RequestParam 都是可以的,问题不在这,在看 @RequestPart(“multfile”) 里面的multfile,postman的入参字段名称不填写或者填写的与后台接口的入参字段名称不一致也不会成功 会报错 Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required request part 'multfile' is not present] 也就是接收不到你的入参文件流
在这里插入图片描述

上面ok后,上传一个大一点的文件报错信息如下, 1048576 bytes 大约是1M,也就是提示你上传最大限制1M文件。

Forwarding to error page from request [/file/upload] due to exception [Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field multfile exceeds its maximum permitted size of 1048576 bytes.]

org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field multfile exceeds its maximum permitted size of 1048576 bytes.
	at org.springframework.web.multipart.support.StandardMultipartHttpServletRequest.handleParseFailure

解决方法: 在项目的application.yaml(或者application.properties文件)里面新增配置如下

# application.yaml 的写法
spring:
  servlet:
    multipart: 
      max-file-size: 50MB # 限制上传文件大小为50M, 如果不限制设为 -1
      max-request-size: 50MB # 限制上传文件大小为50M, 如果不限制设为 -1

# application.properties 的写法
spring.servlet.multipart.maxFileSize=50M
spring.servlet.multipart.maxRequestSize=50M

# 根据自己的配置文件类型任选其一,注意格式问题以免读取不到

如果添加了还是不行仍报错 1048576 bytes 这个提示。注意检查下项目使用的springboot版本,可以去pom文件里面看或者写个main方法

public class Test {

    public static void main(String[] args) {
        String versionSpring = SpringVersion.getVersion();
        String versionSpringBoot = SpringBootVersion.getVersion();
        System.out.println("Spring Version:" + versionSpring);
        System.out.println("SpringBoot Version:" + versionSpringBoot);
    }
}

不同的springboot版本,其配置项略有不同,以为application.properties 的写法为例

# SpringBoot 1.3.x 以下
multipart.maxFileSize=50M
multipart.maxRequestSize=50M

# SpringBoot 1.4.x 至 1.5.x
spring.http.multipart.maxFileSize=50M
spring.http.multipart.maxRequestSize=50M

# SpringBoot 2.x 以上
spring.servlet.multipart.maxFileSize=50M
spring.servlet.multipart.maxRequestSize=50M

最后若这种添加配置的方法还是不行,尝试千万遍还是没读取到或者不起效果。那就放弃添加配置的方法,改为自己写个MultipartFile配置类(复制到自己的项目下即可,重启测试上传功能就ok了)

package com.yulisao.demo;

import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartConfigElement;

/**
 * author yulisao
 * createDate 2023/01/07
 */
@Configuration
public class MultipartFileConfig {
    // 都默认100M文件大小限制。 建议不写死,放配置
    private final static Long maxFileSize = 100L;
    private final static Long maxRequestSize = 100L;

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();

        // 注意这个set方法的单位是字节, 限制100M所以是 100*1024*1024
        //factory.setMaxFileSize(maxFileSize*1024*1024); // SpringBoot低版本写法
        //factory.setMaxRequestSize(maxRequestSize*1024*1024);

        factory.setMaxFileSize(DataSize.ofMegabytes(maxFileSize*1024*1024)); // SpringBoot高版本写法
        factory.setMaxRequestSize(DataSize.ofMegabytes(maxRequestSize*1024*1024));
        return factory.createMultipartConfig();
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/140500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之建造者(Builder)

用来构建复杂对象 分离复杂对象的构建和表示 同样的构建过程可以创建不同的表示 当有一个复杂的对象,构建它的时候,比较复杂 例如,构建一个对象,要传入50个参数,可以先构建part1,再构建part2…最后调用bu…

Git-工作流

前言 一、工作流概述二、Git flow1.主要流程2.优缺点3.适用场景 三、Github flow1.主要流程2.优缺点3.适用场景 四、Gitlab flow1.主要流程2.优缺点3.适用场景 总结参考 一、工作流概述 开发人员通过Git可以记录和追踪代码的变化,包括添加、删除和修改文件。如果是…

【Python 算法】双向迪杰斯特拉算法 Python实现

双向迪杰斯特拉算法Python实现 文章目录 双向迪杰斯特拉算法Python实现简介双向迪杰斯特拉算法优势局限性算法的基本步骤终止条件 基本步骤伪代码Python 实现 简介 双向迪杰斯特拉算法(Bi Directional Dijkstra Algorithm)是一种用于在加权图中查找两个…

红色旅游AR互动体验将景区推向更广泛的市场

AR技术的出现使得各展厅观众可以在虚拟和现实的层面进行互动,利用AR和VR技术,将展览地点扩展到特定的虚拟领域,实现了"无触觉"交互体验,增强现实技术和展馆的对接更加激发人们了解新事物的兴趣。 一、AR景区&#xff1a…

【03】Istio Gateway示例配置

3.1 开放kiali至集群外部 首先将istio-inressateway暴露集群外部; 在node02的ens33网卡上面有多余的ip地址,将该地址绑定在igressgateway的svc 上面。 kubectl edit svc istio-ingressgateway -n istio-system定义kiali的ingress gateway的资源配置清单 apiVersion:…

第十六章,反射与注解例题

package 例题; import java.lang.reflect.Constructor;class 例题1Demo {//变量String s;int i, i2, i3;private 例题1Demo() {//无参构造方法}protected 例题1Demo(String s, int i) {//有参构造方法this.s s;this.i i;}public 例题1Demo(String... strings) throws NumberF…

堆排序(小根堆模板)

输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m。 第二行包含 n 个整数,表示整数数列。 输出格式 共一行,包含 m 个整数,表示整数数列中前 m 小的数。 数据范围 1≤m≤n≤10^5&am…

Centos8上部署Zabbix5.0

1.关闭Selinux及防火墙,避免Web页面无法访问。 setenforce 0 vim /etc/selinux/config 修改“SELINUX”等号后的内容为disabled SELINUXdisabled\\关闭并关闭开机自启 systemctl stop firewalld systemctl disable firewalld 2.配置Centos8本地yum源。 mkdir /mn…

『MySQL快速上手』-⑦-内置函数

文章目录 1.日期函数1.1 获得年月日1.2 获得时分秒1.3 获得时间戳1.4 在日期的基础上加日期1.5 在日期的基础上减去时间1.6 计算两个日期之间相差多少天案例1案例22.字符串函数案例3.数学函数4.其他函数1.日期函数 1.1 获得年月日

基于Python美化图片亮度和噪点

支持添加噪点类型包括:添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点,还提供清除噪点的功能。 我们先看一下实测效果:(test.jpg为原图,new.jpg为添加后的图片…

Rust结构体的定义和实例化

1.结构体特点 Rust的结构体跟元组类型比较类似,它们都包含多个相关的值。和元组一样,结构体的每一部分可以是不同类型。但不同于元组,结构体需要命名各部分数据以便能清楚的表明其值的意义。由于有了这些名字,结构体比元组更灵活&#xff1a…

浅谈二叉树

✏️✏️✏️今天给大家分享一下二叉树的基本概念以及性质、二叉树的自定义实现,二叉树的遍历等。 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流&…

【CUDA编程--编程模型简介算子开发流程】

官方文档:https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html 什么是CUDA CUDA全称(Compute Unified Device Architecture)统一计算架构,是NVIDIA推出的并行计算平台深度学习加速:对于神经网络&…

无线通信测量仪器-4945B/C 无线电通信综合测试仪

01 4945B/C 无线电通信综合测试仪 产品综述: 4945B/4945C无线电通信综合测试仪是多功能、便携式无线电综合测试类仪器,基于软件无线电架构,集成了跳频信号发生与分析、矢量信号发生与解调分析、模拟调制信号发生与解调分析、音频信号发生与…

C语言求数组中出现次数最多的元素

一、前言 遇到一个需求,需要求数组中出现次数最多的元素,查找了一些资料,结合自己的思路,编写了程序并验证。 只考虑元素为非负整数的数组,如果有出现次数相同的元素,则返回较小元素。 二、编程思路 以数…

python3+requests+unittest实战系列【二】

前言:上篇文章python3requestsunittest:接口自动化测试(一)已经介绍了基于unittest框架的实现接口自动化,但是也存在一些问题,比如最明显的测试数据和业务没有区分开,接口用例不便于管理等&…

AI主播“败走”双11,想用AI省成本的商家醒醒吧,程序员不必担心失业,发展空间依旧很大

目录 1 2 3 “AI人”并不算是新鲜事,随着AI的发展,AI主播也开始悄悄进入到直播间中。 持续无间断的直播、比人工费便宜等优势,让很多商家选择了AI主播。 AI主播到底好不好用?终于在今年“双11”现出了原形。 1 AI主播没火过半年…

Python常用插件之emoji表情插件的用法

目录 一、概述 二、安装 三、基本用法 四、高级用法 1、自定义emoji表情 2、使用表情符号列表 3、结合使用Emoji和输入文本 4、动态添加emoji表情 5、自定义Emoji的样式 总结 一、概述 在Python中,使用emoji表情已经成为了一种非常流行的趋势。许多开发者…

Linux Centos 根目录扩展分区(保级教程)

Centos 根目录扩展分区 1. 扩展背景2.列出磁盘信息3. 对磁盘进行分区4. 重启Linux5. 将PV加入卷组centos并分区6.查看分区结果 1. 扩展背景 虚拟机初始分配20G内存,扩容到80G。 2.列出磁盘信息 可以得知容量信息以及即将创建的PV路径(通常为“/dev/s…

tcpdump抓包的字节数量与ethtool统计数据不同的原因

情况介绍 在进行RDMA抓包流量分析时,我使用ethtool工具统计了RDMA网卡的流量发送数据数量,然后使用tcpdump进行抓包。 经过分析发现,tcpdump得到的数据数量总是大于ethtool得到的数据数量,而且每个数据包会多出4个字节。 分析 …