上传文件大小限制报错

news2024/11/25 15:50:59

做了一个上传文件的功能,前端通过文件流程的形式调用后台接口。几百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();
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业如何实现高效运转?工单管理系统有什么特点和优势?

在当今这个数字化、信息化的时代,企业需要一个高效、智能的工具来优化和协调内部和外部的工作流程。工单管理系统正是这样一个不可或缺的软件工具,它能够自动化、智能化地处理工单,提高工作效率和客户满意度。本文将详细介绍工单管理系统的特…

国标28181-2022检测内容GB28181-2022检测内容

目前国标28181-2022平台全项检测一共181项,总的检测相对2016版本要复杂很多,增加了一些比较重要的功能,下面列举下检测项(qq 123011785):

征服地球极限,中国极地科考与登峰事业的“御寒”之旅

7日,全国各地大幅降温,今年第一场暴风雪也席卷了黑龙江。 伴随着冷空气不断入侵,气温持续走低,寒冬的脚步越来越近,供暖也成为了北方地区的冬季重点民生课题。 是日,天色未晓,黑龙江各地身披红…

C语言 做一个学生信息管理系统

#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct person {char name[30];char sex[10];int num;struct person *next; }stu; stu *head NULL; void printf_link(stu *head) {stu *pd head;while(pd ! NULL){printf("姓名&a…

单应用多语言切换(语言国际化)

目录 编写语言管理类 编写Activity 的父类 DEMO 实验界面--首页Activity DEMO 实验界面--设置语言Activity Demo 语言资源文件 参考连接 编写语言管理类 package com.example.languageapplicationimport android.content.Context import android.content.ContextWrapper i…

code:-9907磁盘不足如何处理?帮你整理了几个必备的!

错误代码-9907表示磁盘空间不足。这意味着您的设备上的磁盘空间不足以完成当前的下载或存储任务。我们可以用这些方法解决这个问题。 一、对大文件进行压缩 可以使用压缩软件将一些文件进行压缩&#xff0c;以减少它们占用的磁盘空间。下面以嗨格式压缩大师作为操作示例。 1、…

URI 和 URL 的区别

URI包括URL和URN两个类别&#xff0c;URL是URI的子集&#xff0c;所以URL一定是URI&#xff0c;而URI不一定是URL URI Universal Resource Identifier 统一资源标志符&#xff0c;用来标识抽象或物理资源的一个紧凑字符串。 通过使用位置&#xff0c;名称或两者来标识Interne…

超好用!在线即可制作电子产品图册

​电子产品图册是展示产品特点、功能和外观的重要方式之一。通过图册&#xff0c;可以让客户更好地了解产品&#xff0c;增强信任感&#xff0c;从而促进销售。同时&#xff0c;对于企业来说&#xff0c;制作精美的电子产品图册也是展示企业文化和品牌形象的重要手段之一。 一、…

Matter学习笔记(2)——数据模型和设备类型

一、设备数据模型 Matter 中的设备具有明确定义的 数据模型(DM)&#xff0c;它是设备功能的分层建模。使用 属性(Attribute)、命令(Command) 和 事件(Event) 的概念描述 Matter 节点支持的远程操作&#xff0c;并分组为称为集群的逻辑块。Matter 应用集群规范中包含的集群具有…

提升绘图效率不再难,看看这8款AI流程图软件,一键快速生成流程图!

流程图是表示流程、系统和思想的重要视觉辅助工具。在当今数字时代&#xff0c;AI技术的出现已经彻底改变了制作流程图的方式。 在本文中&#xff0c;我们将与各位分享8款好用的AI流程图软件&#xff0c;借助每款软件内置的AI能力&#xff0c;可以快速绘制出一份完整的流程图&…

Java修仙传之神奇的ES2(巧妙的查询及结果处理篇)

SDL语句查询 查询的基本语法 GET /indexName/_search {"query": {"查询类型": {"查询条件": "条件值"}} } 根据文档id查询 #查询文档 GET hotel/_doc/36934 查询所有 会弹出该索引库下所有文档// 查询所有 GET /indexName/_searc…

乐园要吸引儿童还是家长?万达宝贝王2000万会员的求精之路

2023年6月&#xff0c;万达宝贝王正式迈入“400店时代”。 万达宝贝王在全国200多座城市&#xff0c;以游乐设施、主题活动、成长课程服务10亿多用户&#xff0c;拥有2000多万名会员&#xff0c;是真正的国内儿童乐园领跑者。 当流量时代变成“留量”时代&#xff0c;用户增长…

利用RoboBrowser库和爬虫代理实现微博视频的爬取

技术概述 微博是一个社交媒体平台&#xff0c;用户可以在上面发布和分享各种内容&#xff0c;包括文字、图片、音频和视频。微博视频是微博上的一种重要的内容形式&#xff0c;有时我们可能想要下载微博视频到本地&#xff0c;以便于观看或分析。但是&#xff0c;微博视频并没…

2023年阿里云腾讯云双11活动优惠券,阿里云最高省2400元,腾讯云最高省3600元

阿里云腾讯云2023年双11活动优惠券都已经出炉了&#xff0c;阿里云优惠券总额8940元&#xff0c;最高可省2400元&#xff0c;腾讯云优惠券总额9999元&#xff0c;最高可省3600元。阿里云和腾讯云的优惠券旨在帮助用户进一步减少上云成本&#xff0c;推荐大家先领券后购买。 一…

提升服务器性能相关

目录 查看是否开启超线程 显示所有逻辑 CPU 及其 HT 对关系 查看NUMA Isolcpus 隔离 禁止使用中断均衡服务 设置线程名称 设置线程亲和性 taskset工具 使用代码绑定 绑定core需要注意以下几点 查看是否开启超线程 lscpu | grep Thread 显示所有逻辑 CPU 及其 HT 对关…

功能更新|Leangoo领歌免费敏捷工具支持SAFe大规模敏捷框架

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 
 Leangoo可以支持敏捷研发管理全流程&#xff0c;包括小型团队敏捷开发&#xff0c;规模化敏捷SAFe&#xf…

umi4 React项目使用icon集合

umi项目中使用icon集合。 icon集合&#xff1a;https://icones.js.org/ 测试使用这个ion .umirc.ts文件 icons:{autoInstall:{iconify-json/ion: true,//自动安装iconify-json/ion},include: [ion:social-windows-outline]&#xff0c;//要使用的必须把icon类名加到include中…

数据集笔记:Telecom Shanghai Dataset

0 数据地址 &#x1f4f1;Telecom Shanghai Dataset (kaggle.com) 1 数据描述 该数据集由上海电信提供&#xff0c;包含超过720万条记录&#xff0c;记录了9481部手机通过3233个基站访问互联网的情况&#xff0c;时间跨度为六个月。例如&#xff0c;下图显示了基站的分布情况…

Primavera P6 Calendars 全局日历和项目日历Calendar

Primavera P6 日历基本介绍 Primavera P6 日历特性和功能是项目和进度管理的强大工具。在这里我们将讨论 Primavera P6 中三种最常见的日历类型中的两种&#xff1a;全局日历和项目日历。 Primavera P6 日历的第三种类型是资源日历&#xff0c;它非常专业&#xff0c;在项目中…

数字时代的法律前沿:TikTok与政府监管的博弈

在当今数字化时代&#xff0c;社交媒体已经成为了人们生活的一部分&#xff0c;扮演着沟通、娱乐和信息获取的重要角色。TikTok&#xff0c;作为一款短视频分享应用&#xff0c;在全球范围内迅速崭露头角&#xff0c;吸引了数亿用户。 然而&#xff0c;随着TikTok的崛起&#…