SoapUI中通过REST服务上传LZMA文件时的文件损坏问题
问题分析与解决方案
问题原因
核心问题出在mockRequest.requestContent的使用逻辑上:
- 这个属性会把请求的二进制内容以字符串形式读取,但LZMA这类二进制文件包含大量非可打印字符或不符合默认字符编码(通常是UTF-8)的字节。
- 当二进制数据被转成字符串时,无效的字节序列会被替换成占位符(比如
�),再通过getBytes()转回字节数组时,这些占位符对应的字节和原数据不一致——虽然文件大小看似没变,但关键字节已被篡改,破坏了LZMA的压缩结构,导致无法解压。
解决方案
直接读取请求的原始输入流,完全跳过字符串转换环节,用以下Groovy脚本替换原有保存逻辑:
def inputStream = mockRequest.requestInputStream def outputFile = new File("C:/test/new_container.tar.lzma") outputFile.withOutputStream { out -> out << inputStream } log.info "File saved successfully"
补充说明
- 该脚本直接将请求的原始二进制输入流写入文件,保证字节1:1还原,彻底避免编码转换导致的损坏。
- 上传时保持
Content-Type: application/octet-stream即可,这个类型明确告知服务端接收的是纯二进制数据,无需额外解析。
内容的提问来源于stack exchange,提问作者Sumsar1812
相关产品推荐
相关产品推荐

