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

Spring MMS接收API获取图片/GIF文件Part内容为空问题求助

MMS接收API图片Part为空问题排查方案

问题背景

开发Spring REST API接收MMS时,调用MultipartHttpServletRequest.getParts()获取图片/GIF对应的Part时,size显示为0,但3GP视频、文本文件正常;Filter已确认请求体包含图片的base64内容。


排查与修复步骤

1. 修复Filter的请求流耗尽问题

你的Filter直接读取了HttpServletRequest.getInputStream(),而Servlet请求流是一次性的——流被读取后,后续Spring的Multipart解析器无法再获取内容,导致二进制Part解析失败(文本/视频因解析逻辑差异未表现出问题)。

解决代码:使用ContentCachingRequestWrapper包装请求,实现流的重复读取:

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
    ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(httpRequest);
    
    // 先让后续处理流程执行,再读取缓存的请求体
    filterChain.doFilter(wrappedRequest, servletResponse);
    
    String requestBody = new String(wrappedRequest.getContentAsByteArray(), StandardCharsets.UTF_8);
    LOGGER.info("Request Body: {}", requestBody);
}

2. 检查Multipart大小限制配置

如果图片大小超过Spring Multipart配置的阈值,会被截断导致size为0。检查并调整配置:

# application.yml 示例
spring:
  servlet:
    multipart:
      max-file-size: 10MB       # 单个文件最大容量
      max-request-size: 20MB    # 整个请求总容量
      enabled: true

3. 处理Base64编码的Part

若请求中图片Part的Content-Transfer-Encoding为base64,Spring默认解析器无法自动解码,会导致读取到空内容。此时需要手动解码:

private byte[] getDecodedPartContent(Part part) throws IOException {
    try (InputStream inputStream = part.getInputStream()) {
        byte[] encodedBytes = IOUtils.toByteArray(inputStream);
        return Base64.getDecoder().decode(encodedBytes);
    }
}

同时检查请求体的Part header,确认是否存在Content-Transfer-Encoding: base64标识。

4. 验证Part名称匹配逻辑

日志中图片Part的contentType包含name=709055746.jpg,这里的name是文件名,而非Part的参数名称。需要确认请求体中Part的Content-Disposition头是否为:

Content-Disposition: form-data; name="mmsContent"; filename="709055746.jpg"
如果name字段不是mmsContent,你的过滤逻辑会错误匹配到空Part,导致size显示为0。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:05:02