the request was rejected because its size (1360408633) exceeds the configured maximum (52428800)

the request was rejected because its size (1360408633) exceeds the configured maximum (52428800)

一.前言

当我们用Postman将某文件当参数请求上传文件接口的时候出现了错误,下面我们来复现它。

1.1.Postman请求

我们用postman发送请求,返回值如下所示。

在这里插入图片描述
在这里插入图片描述

1.2.服务器日志

我们打开后端可以看到日志报出了如下错误。

在这里插入图片描述

二.排查问题

2.2.上网查阅

通过查阅资料我们了解到了是因为MultipartConfigElement的配置出现了问题。

2.1.配置类

因为刚用MultipartConfigElement类用的都是默认配置,而默认配置中上传文件大小限制是开启的,单个文件限制为1M,而且最大的请求总文件大小限制是10M,该配置类如下所示。

package org.springframework.boot.autoconfigure.web.servlet;

import javax.servlet.MultipartConfigElement;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.PropertyMapper;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.util.unit.DataSize;

/**
 * 配置MultipartConfigElement时要使用的属性。
 */
@ConfigurationProperties(prefix = "spring.servlet.multipart", ignoreUnknownFields = false)
public class MultipartProperties {

	/**
	 * 是否启用对多部分上传的支持。
	 */
	private boolean enabled = true;

	/**
	 * 上载文件的中间位置。
	 */
	private String location;

	/**
	 * 单个文件限制。
	 */
	private DataSize maxFileSize = DataSize.ofMegabytes(1);

	/**
	 * 请求总文件大小限制。
	 */
	private DataSize maxRequestSize = DataSize.ofMegabytes(10);

	/**
	 * 将文件写入磁盘的阈值。
	 */
	private DataSize fileSizeThreshold = DataSize.ofBytes(0);

	/**
	 * 是否在访问文件或参数时延迟解析多部分请求。
	 */
	private boolean resolveLazily = false;

	public boolean getEnabled() {
		return this.enabled;
	}

	public void setEnabled(boolean enabled) {
		this.enabled = enabled;
	}

	public String getLocation() {
		return this.location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public DataSize getMaxFileSize() {
		return this.maxFileSize;
	}

	public void setMaxFileSize(DataSize maxFileSize) {
		this.maxFileSize = maxFileSize;
	}

	public DataSize getMaxRequestSize() {
		return this.maxRequestSize;
	}

	public void setMaxRequestSize(DataSize maxRequestSize) {
		this.maxRequestSize = maxRequestSize;
	}

	public DataSize getFileSizeThreshold() {
		return this.fileSizeThreshold;
	}

	public void setFileSizeThreshold(DataSize fileSizeThreshold) {
		this.fileSizeThreshold = fileSizeThreshold;
	}

	public boolean isResolveLazily() {
		return this.resolveLazily;
	}

	public void setResolveLazily(boolean resolveLazily) {
		this.resolveLazily = resolveLazily;
	}

	/**
	 * 使用属性创建一个新的MultipartConfigElement。
	 */
	public MultipartConfigElement createMultipartConfig() {
		MultipartConfigFactory factory = new MultipartConfigFactory();
		PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
		map.from(this.fileSizeThreshold).to(factory::setFileSizeThreshold);
		map.from(this.location).whenHasText().to(factory::setLocation);
		map.from(this.maxRequestSize).to(factory::setMaxRequestSize);
		map.from(this.maxFileSize).to(factory::setMaxFileSize);
		return factory.createMultipartConfig();
	}

}

三.解决问题

3.1.解决思路

我们只需要将配合文件中单个文件限制和请求总文件大小限制设置大一些就好了。

3.2.配置文件

因为我们刚刚上传文件大小为1.29G,所以我们这里配置将请求总文件大小限制设置为了1300M。

#文件上传开关
spring.servlet.multipart.enabled=true
#单个文件限制
spring.servlet.multipart.max-file-size=1300MB
#请求总文件大小限制
spring.servlet.multipart.max-request-size=1300MB
#阈值,超过后文件将被写入磁盘
spring.servlet.multipart.file-size-threshold=2KB

四.测试

4.1.Postman请求

我们用postman用相同的文件作为参数再次请求该接口返回值如下所示。

在这里插入图片描述

4.2.服务器日志

我们接着查看后端日志可以看到上传成功了,如下所示

在这里插入图片描述

4.2.文件

我们打开4.2打印出的未文件所在路径,可以看到文件在这里。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Spring Boot项目上传大文件报错 "the request was rejected because its size exceeds the configured maximum 10485760",这是因为默认情况下,Spring Boot限制了请求的大小为10MB。您可以通过以下几种方式解决这个问题: 1. 在application.properties或application.yml文件中添加以下配置,将请求大小限制扩大到您需要的大小(例如,20MB): ``` spring.servlet.multipart.max-request-size=20MB spring.servlet.multipart.max-file-size=20MB ``` 2. 如果您只想为特定的上传接口增加文件大小限制,可以在对应的Controller方法上添加注解: ```java @PostMapping("/upload") @MaxUploadSizeExceededExceptionHandler public void uploadFile(@RequestParam("file") MultipartFile file) { // 处理上传文件 } ``` 然后,在配置类中创建一个异常处理器: ```java @ControllerAdvice public class MaxUploadSizeExceededExceptionHandler { @ExceptionHandler(MaxUploadSizeExceededException.class) public ResponseEntity handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { return ResponseEntity .status(HttpStatus.PAYLOAD_TOO_LARGE) .body("File size exceeds the limit!"); } } ``` 这样,当上传的文件大小超过限制时,将返回一个自定义的错误响应。 3. 如果您想处理更大的文件,建议考虑使用分片上传或将文件直接上传到云存储服务(如Amazon S3、七牛云等),然后在数据库中存储文件的元数据。 希望以上解决方案能帮到您!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值