asp在网站制作中的作用,那个网站做租赁好,博物馆网站建设经费请示,免费seo网站问题排查和解决过程
之前做了个项目#xff0c;需要用到文件上传#xff0c;启动项目正常#xff0c;正常上传图片也正常#xff0c;但这里图片刚好都小于1M#xff0c;在代码配置文件里面也写了配置#xff0c;限制大小为500M#xff0c;想着就没问题#xff08;测试…问题排查和解决过程
之前做了个项目需要用到文件上传启动项目正常正常上传图片也正常但这里图片刚好都小于1M在代码配置文件里面也写了配置限制大小为500M想着就没问题测试环境覆盖OK正式环境不太一样
今天有同事在项目上替换内容图片突然报了个错“413”
1、前端控制台报错 Access to XMLHttpRequest at https://opm.custom.zdjcyun.com/cos/upload from origin http://111.230.194.242:9981 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 这里当然不是什么跨域问题然后后端接口调用排查
2、控制台异常 org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (1121317) exceeds the configured maximum (1048576) Caused by: java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (1121317) exceeds the configured maximum (1048576) Caused by: org.apache.tomcat.util.http.fileupload.impl.SizeLimitExceededException: the request was rejected because its size (1121317) exceeds the configured maximum (1048576) 从上述异常可以看出是因为上传的file文件超过了spring默认配置的最大值1048576 bytes上传文件我们通常情况下是使用MultipartFile接口类接收前端上传的文件可见对于MultipartFile文件的默认限制也是1048576 bytes即1M。
重点这里我的配置文件已经设置过文件大小为500M
spring:servlet:multipart:enabled: truefile-size-threshold: 0max-file-size: 500MBmax-request-size: 500MB
3、测试环境
测试正常通过
4、线上环境
此时已经意识到是线上环境的问题但我们用的是容器管理KubeSphere统一管理nginx一般是默认配置负责生产环境的同事这个默认配置是没有更改过的都没注意还好改一下路由配置就OK了 问题总结
线上环境总是和测试环境有不同测试用例覆盖不够相应路由和代理配置要考虑周全一般就是①代码配置、②nginx配置、③其他路由网关配置、④前端限制开发过程按1234排查线上排查则反向按4321顺序排查
相关知识
1、上传文件默认参数
SpringBoot不同的版本对应的设置参数不同 Spring Boot 1.3.x and earlier multipart.maxFileSize multipart.maxRequestSize Spring Boot 1.4.x and 1.5.x spring.http.multipart.maxFileSize spring.http.multipart.maxRequestSize Spring Boot 2.x spring.servlet.multipart.maxFileSize spring.servlet.multipart.maxRequestSize 2、配置方式
方法一、在配置文件.yml或者.properties中直接修改参数
例如我使用的是SpringBoot 2.2.2的版本然后直接再配置文件中设置参数大小
#做限制的参数配置
spring:servlet:multipart:enabled: true #默认支持文件上传max-file-size: 20MB # 最大支持文件大小max-request-size: 30MB # 最大支持请求大小#不做限制的参数配置
spring:servlet:multipart:enabled: true #默认支持文件上传max-file-size: -1 #不做限制max-request-size: -1 #不做限制
设置完重启项目即可成功上传文件。
方法二、自定义config配置类
将参数配置在远程配置文件中心如果是配置项目中的配置文件中那就跟方法一一样就没必要再单独写配置类了将参数配置在远程配置中心就是为了可以根据临时需求动态修改参数而不用重启项目开发过程中所有配置保持一致通过测试即可。
常见的远程配置文件中心服务有Nacos、Apollo(阿波罗)、SpringCloud等等或者容器使用文件挂载更改配置后重新构件用例即可。方法三、自定义MultipartFileConfig配置类
Configuration
public class MultipartFileConfig {Value(${config.multifile.maxFileSize})private Long maxFileSize;Value(${config.multifile.maxRequestSize})private Long maxRequestSize;Beanpublic MultipartConfigElement multipartConfigElement() {MultipartConfigFactory factory new MultipartConfigFactory();/*** 单个数据大小* DataSize.ofMegabytes(maxFileSize)默认是配置字节将字节转化为MB*/factory.setMaxFileSize(DataSize.ofMegabytes(maxFileSize));// 总上传数据大小factory.setMaxRequestSize(DataSize.ofMegabytes(maxRequestSize));return factory.createMultipartConfig();}
}