HTTP Status 400 - Required MultipartFile parameter 'file' is not present

本文记录了一个关于multipartResolver配置缺失的问题及其解决方案。作者在Spring框架中配置multipartResolver时遇到了问题,原因是缺少必要的配置文件。通过调整配置文件并指定默认编码为UTF-8,最终解决了问题。
<bean name="multipartResolver"  
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
    <property name="defaultEncoding" value="UTF-8"></property>  
</bean>  

因为缺少配置文件 在dispatch里, 花了很久时间, 记录一下.

2025-09-26 17:17:38.096 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [d7d66844, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53739] New http connection, requesting read 2025-09-26 17:17:38.096 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] New http connection, requesting read 2025-09-26 17:17:38.097 [reactor-http-nio-3] DEBUG reactor.netty.transport.TransportConfig - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2025-09-26 17:17:38.097 [reactor-http-nio-2] DEBUG reactor.netty.transport.TransportConfig - [d7d66844, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53739] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)} 2025-09-26 17:17:38.156 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Increasing pending responses, now 1 2025-09-26 17:17:38.196 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServer - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@496f5f3 2025-09-26 17:17:38.296 [reactor-http-nio-3] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [7dd8eb32-1] HTTP POST "/master/part/import/excel" 2025-09-26 17:17:38.347 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerMapping - [7dd8eb32-1] Mapped to com.hvlink.controller.PartController#importPart(MultipartFile) 2025-09-26 17:17:38.457 [reactor-http-nio-3] DEBUG org.springframework.web.method.HandlerMethod - [7dd8eb32-1] Could not resolve parameter [0] in public com.hvlink.common.Result<com.hvlink.entity.vo.master.PartImportResultVO> com.hvlink.controller.PartController.importPart(org.springframework.web.multipart.MultipartFile): 400 BAD_REQUEST "Required MultipartFile parameter 'file' is not present" 2025-09-26 17:17:38.461 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.a.RequestMappingHandlerAdapter - [7dd8eb32-1] Using @ExceptionHandler com.hvlink.exceptions.ExceptionHandle#handleException(Exception) 2025-09-26 17:17:38.488 [reactor-http-nio-3] ERROR com.hvlink.exceptions.ExceptionHandle - ===服务器内部错误== org.springframework.web.server.ServerWebInputException: 400 BAD_REQUEST "Required MultipartFile parameter 'file' is not present" at org.springframework.web.reactive.result.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:114) Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Assembly trace from producer [reactor.core.publisher.MonoSupplier] : reactor.core.publisher.Mono.fromSupplier(Mono.java:718) org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.getDefaultValue(AbstractNamedValueArgumentResolver.java:209) Error has been observed at the following site(s): *____Mono.fromSupplier ⇢ at org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.getDefaultValue(AbstractNamedValueArgumentResolver.java:209) *___Mono.switchIfEmpty ⇢ at org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.resolveArgument(AbstractNamedValueArgumentResolver.java:112) |_ Mono.defaultIfEmpty ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:206) |_ Mono.doOnError ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:207) *_____________Mono.zip ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:214) |_ Mono.flatMap ⇢ at org.springframework.web.reactive.result.method.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:136) *___________Mono.defer ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:200) *____________Mono.then ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:200) |_ Mono.doOnNext ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:201) |_ Mono.doOnNext ⇢ at org.springframework.web.reactive.result.method.annotation.RequestMappingHandlerAdapter.handle(RequestMappingHandlerAdapter.java:202) Original Stack Trace: at org.springframework.web.reactive.result.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:114) at org.springframework.web.reactive.result.method.annotation.AbstractNamedValueArgumentResolver.lambda$getDefaultValue$1(AbstractNamedValueArgumentResolver.java:215) at reactor.core.publisher.MonoSupplier.subscribe(MonoSupplier.java:57) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:82) at reactor.core.publisher.Operators.complete(Operators.java:137) at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:145) at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4475) at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:129) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:240) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onComplete(MonoIgnoreThen.java:203) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onComplete(MonoFlatMap.java:181) at reactor.core.publisher.Operators.complete(Operators.java:137) at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:121) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:282) at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180) at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2400) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:139) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2196) at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2070) at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96) at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onSubscribe(MonoPeekTerminal.java:152) at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:451) at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:219) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:201) at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:83) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:53) at reactor.core.publisher.Mono.subscribe(Mono.java:4490) at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55) at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:1112) at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:707) at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:481) at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:626) at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:114) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:230) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:333) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:454) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.lang.Thread.run(Thread.java:750) 2025-09-26 17:17:38.498 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [7dd8eb32-1] Using 'application/json' given [*/*] and supported [application/json, application/*+json, application/x-ndjson, text/event-stream] 2025-09-26 17:17:38.498 [reactor-http-nio-3] DEBUG o.s.w.r.r.m.annotation.ResponseBodyResultHandler - [7dd8eb32-1] 0..1 [com.hvlink.common.Result<?>] 2025-09-26 17:17:38.562 [reactor-http-nio-3] DEBUG o.s.http.codec.json.Jackson2JsonEncoder - [7dd8eb32-1] Encoding [Result(status=500, msg=发现未知问题,请联系管理员!, data=null, timestamp=1758878258493)] 2025-09-26 17:17:38.658 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Decreasing pending responses, now 0 2025-09-26 17:17:38.658 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Last HTTP packet was sent, terminating the channel 2025-09-26 17:17:38.659 [reactor-http-nio-3] DEBUG reactor.netty.channel.ChannelOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] [HttpServer] Channel inbound receiver cancelled (operation cancelled). 2025-09-26 17:17:38.675 [reactor-http-nio-3] DEBUG o.s.web.server.adapter.HttpWebHandlerAdapter - [7dd8eb32-1] Completed 500 INTERNAL_SERVER_ERROR 2025-09-26 17:17:38.679 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Last HTTP response frame 2025-09-26 17:17:38.767 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32-1, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Dropped HTTP content, since response has been sent already: CONTENT(decodeResult: success, content: PooledSlicedByteBuf(ridx: 0, widx: 1664, cap: 1664/1664, unwrapped: PooledUnsafeDirectByteBuf(ridx: 2048, widx: 2048, cap: 2048))) 2025-09-26 17:17:38.768 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] Dropped HTTP content, since response has been sent already: CONTENT(decodeResult: success, content: PooledSlicedByteBuf(ridx: 0, widx: 8192, cap: 8192/8192, unwrapped: PooledUnsafeDirectByteBuf(ridx: 8192, widx: 9044, cap: 32768))) 2025-09-26 17:17:38.783 [reactor-http-nio-3] DEBUG reactor.netty.channel.ChannelOperationsHandler - [7dd8eb32, L:/0:0:0:0:0:0:0:1:9000 - R:/0:0:0:0:0:0:0:1:53740] No ChannelOperation attached. @PostMapping("/import/excel") public Result<PartImportResultVO> importPart(@RequestParam("file") MultipartFile file) { if (file == null || file.isEmpty()) { return Result.fail("上传的文件为空"); } log.info("收到文件: {}, 大小: {} bytes", file.getOriginalFilename(), file.getSize()); return partService.importPart(file); }
09-27
<think>好的,我现在要解决用户在Spring Boot上传文件时遇到的'MultipartFile parameter 'file' is not present'错误。首先,我需要回想一下常见的导致这个错误的原因。 首先,用户可能没有正确配置Multipart请求。Spring Boot默认使用Tomcat,可能需要检查`application.properties`中是否启用了文件上传支持。比如,有没有设置`spring.servlet.multipart.enabled=true`,或者有没有调整最大文件大小和请求大小的限制。如果这些配置缺失或错误,可能导致无法正确解析上传的文件。 接下来,前端的表单设置是否正确?比如,表单的`enctype`属性是否设置为`multipart/form-data`。如果这个属性没有正确设置,后端可能无法接收到文件参数。同时,检查文件输入字段的名称是否与控制器方法中的参数名一致,比如前端是`name="file"`,后端参数是`@RequestParam("file")`,如果不一致就会出现这个错误。 然后是控制器的处理。用户可能在方法参数中漏掉了`@RequestParam`注解,或者注解中的名称与前端的字段名不匹配。例如,参数应该是`@RequestParam("file") MultipartFile file`,如果这里写成了其他名称,如`@RequestParam("uploadedFile")`,而前端使用的是`file`,就会导致参数不存在。 另外,还要考虑请求的方式是否正确。上传文件通常使用POST方法,如果控制器方法映射的是GET请求,或者前端发送的是GET请求,那么文件数据不会被正确传输,导致参数缺失。 还有可能用户没有添加必要的依赖。虽然Spring Boot Starter Web默认包含Tomcat和Multipart支持,但如果项目中有排除相关依赖的情况,或者使用了其他HTTP引擎如Jetty而没有正确配置,也可能导致问题。需要检查pom.xml或build.gradle中的依赖是否正确。 此外,文件上传的大小限制也可能导致问题。如果上传的文件超过了默认的大小,Spring Boot会抛出异常,但错误信息可能不明确。用户需要检查是否配置了足够大的`max-file-size`和`max-request-size`。 最后,建议用户检查日志,查看是否有更详细的错误信息,比如文件解析失败的具体原因。开启Spring Boot的调试日志可能会帮助定位问题所在。 总结下来,解决步骤应该是: 1. 检查Multipart配置是否正确。 2. 确认前端表单的enctype和方法是否正确。 3. 核对控制器参数注解和名称是否匹配。 4. 确保依赖没有缺失或被错误排除。 5. 调整文件大小限制。 6. 查看服务器日志获取更多信息。 可能还需要提供代码示例,比如配置文件的设置和控制器方法的正确写法,帮助用户对照修改。</think>在Spring Boot中解决`MultipartFile parameter 'file' is not present`错误,需逐步排查以下原因: --- ### 1. 检查Multipart配置 - **启用Multipart支持** 在`application.properties`中确保配置已开启: ```properties spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB ``` 若未配置,后端无法解析文件上传请求[^1]。 - **Tomcat依赖确认** 检查是否排除了Tomcat依赖(如使用Jetty需额外配置): ```xml <!-- Maven中避免排除spring-boot-starter-tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` --- ### 2. 前端表单验证 - **enctype属性** 表单必须设置`enctype="multipart/form-data"`: ```html <form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file"> <button>提交</button> </form> ``` - **参数名一致性** 确保文件输入字段的`name`属性值与控制器参数名一致(如`name="file"`对应`@RequestParam("file")`)。 --- ### 3. 控制器方法修正 - **添加@RequestParam注解** 控制器中必须使用`@RequestParam`并明确参数名: ```java @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理逻辑 return "success"; } ``` 若省略注解或参数名不匹配,会触发该错误。 --- ### 4. 请求方法匹配 - **确保使用POST请求** 文件上传必须通过POST方法提交。若控制器映射为`@GetMapping`,会因请求方法不匹配导致参数丢失。 --- ### 5. 日志与调试 - **查看异常详情** 开启调试日志以定位具体问题: ```properties logging.level.org.springframework.web=DEBUG ``` 若日志显示`FileSizeLimitExceededException`,需增大`max-file-size`配置。 --- ### 完整示例代码 **application.properties** ```properties spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=50MB spring.servlet.multipart.max-request-size=50MB ``` **控制器** ```java @RestController public class FileUploadController { @PostMapping("/upload") public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return ResponseEntity.badRequest().body("文件为空"); } // 保存文件逻辑 return ResponseEntity.ok("上传成功"); } } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值