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

WireMock返回修改后的二进制文件的原因及解决方法咨询

WireMock返回二进制文件内容/大小异常的原因及解决方法

可能的原因

  • 文本编码自动转换:WireMock默认会将bodyFileName指定的文件按文本格式解析(比如UTF-8编码),二进制文件包含的非文本字节会被转码,导致内容错乱、体积增大。
  • 响应Content-Type未正确设置:未明确指定二进制类型的Content-Type时,WireMock会默认按文本类型处理响应,触发编码转换逻辑。
  • Postman接收/保存时的转码:Postman默认可能以文本模式解析响应,保存时自动转码,进一步加剧内容异常。

解决方法

  • 设置正确的Content-Type响应头
    在WireMock存根的响应配置中添加Content-Type头,值设为application/octet-stream(通用二进制类型),或对应文件的具体类型(如图片用image/png)。
    如果是通过WireMock API配置(Postman中调用WireMock接口),配置示例如下:
    {
      "request": {
        "method": "GET",
        "url": "/your-endpoint"
      },
      "response": {
        "status": 200,
        "headers": {
          "Content-Type": "application/octet-stream"
        },
        "bodyFileName": "response.bin"
      }
    }
    
  • 确保文件存放路径正确
    将response.bin放在WireMock的__files目录下(默认路径:wiremock/__files/),WireMock才能正确读取原始二进制文件。
  • Post端保存响应时选择二进制模式
    在Postman中收到响应后,点击"Save Response",选择"Save as binary"选项,避免Postman将响应转码为文本格式保存。
  • 验证WireMock的文件读取逻辑
    如果是自定义WireMock扩展或Java代码配置,确保以字节流方式读取文件,避免文本编码处理:
    // Java示例:以字节流读取二进制文件
    byte[] fileContent = Files.readAllBytes(Paths.get("wiremock/__files/response.bin"));
    stubFor(get(urlEqualTo("/your-endpoint"))
            .willReturn(aResponse()
                    .withHeader("Content-Type", "application/octet-stream")
                    .withBody(fileContent)));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:55:01