You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java响应式实现AWS S3分片文件上传遇415错误求助

415错误的可能原因及解决方法

415错误表示服务器不支持请求的媒体类型,结合你的代码和场景,主要有以下几个原因:

1. 注解使用错误

在Spring WebFlux中处理multipart/form-data请求时,不能用@RequestBody注解接收Flux<Part>。@RequestBody用于绑定原始请求体内容,而multipart请求需要专门的解析器来拆分并封装成Part对象,直接将Flux<Part>作为方法参数即可,无需添加@RequestBody。

修改后的代码:

@RequestMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE, method = {RequestMethod.POST, RequestMethod.PUT})
public Mono<ResponseEntity<UploadResult>> multipartUploadHandler(@RequestHeader HttpHeaders headers, Flux<Part> parts) {

    return parts
            .ofType(FilePart.class) // 暂时忽略其他类型数据
            .flatMap((part) -> saveFile(headers, s3config.getBucket(), part))
            .collect(Collectors.toList())
            .map((keys) -> ResponseEntity.status(HttpStatus.CREATED)
                    .body(new UploadResult(HttpStatus.CREATED, keys)));
}

2. 缺少Multipart解析器或依赖

如果是Spring Boot项目,确保已经引入spring-boot-starter-webflux依赖(WebFlux会自动配置Multipart解析器)。若手动配置了HttpMessageReader,可能覆盖了默认的Multipart解析器,导致无法处理multipart请求。

检查pom.xml(Maven):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

3. 请求的Content-Type不符合要求

确认请求的Content-Type必须是multipart/form-data且包含合法的boundary参数。比如使用Postman上传文件时,选择form-data格式后,工具会自动生成正确的Content-Type头;如果是自定义请求,需要手动指定boundary(通常由客户端生成,用于分隔不同的表单部分)。


内容的提问来源于stack exchange,提问作者Argun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 19:05:15