JMeter上传图片报Chunk-Length mismatch错误问题咨询
问题根因
你遇到的长度不匹配错误核心原因是配置逻辑错误:当前接口是直接接收二进制文件流的PUT分片上传接口,不是multipart表单上传接口,你勾选了Use Multipart/form-data选项后,JMeter会自动在文件内容前后拼接multipart分隔符、表单字段描述等额外内容,报错里的长度差73800-73581=219字节就是这些多拼接的内容,Postman能执行成功是因为默认走了二进制上传模式,没有添加这些冗余内容。
正确计算并传递Content-Length的方法
- 第一步先修正核心配置:取消勾选HTTP请求采样器中
Use Multipart/form-data选项,删除文件上传配置里填写的file_upload[]参数名(传原始流不需要表单参数名),仅保留MIME类型为image/jpeg、文件路径配置正确即可。 - 修正配置后JMeter自动计算的Content-Length就是文件实际字节大小,和你需要的73581完全一致,不需要手动计算。
- 如果需要提前获取文件字节数做变量引用,可以在请求前添加JSR223预处理程序,用Groovy脚本计算:
def uploadFile = new File("/你的文件实际路径/fish.jpeg") vars.put("correctContentLength", uploadFile.length().toString())
后续需要引用文件长度时直接用${correctContentLength}即可,计算结果和系统底层统计的文件字节数完全一致,不会有误差。
覆盖JMeter自动Content-Length计算逻辑的方法
优先推荐通过修正配置让JMeter自动计算出正确值,强行覆盖容易出现请求体实际长度和请求头声明长度不匹配的其他问题。如果确实需要手动指定,可选择以下两种方式:
- 通过JSR223预处理程序强制修改采样器配置,在请求发送前关闭自动计算逻辑并指定固定值:
// 标记请求体为原始内容,关闭表单自动拼接 sampler.setPostBodyRaw(true) // 强制指定Content-Length值 sampler.setContentLength(Integer.parseInt(vars.get("correctContentLength")))
- 修改JMeter配置文件:打开JMeter安装目录下的
user.properties文件,添加配置行httpclient4.overwrite_content_length=true,重启JMeter后,你在HTTP信息头管理器中手动填写的Content-Length就会优先生效,不会被自动计算值覆盖。
额外注意:你当前配置的Content-Range为
bytes 0-73580/73581,属于整文件分片上传的最后一片,必须保证请求体是纯文件二进制内容,不能夹带任何表单分隔符、参数描述类的额外字符,否则服务端的分片校验一定会失败。
内容的提问来源于stack exchange,提问作者Sujata
相关产品推荐
相关产品推荐

