我正在 SoapUI 中开发 REST 服务,我需要上传 .lzma 文件,将其解压,然后处理其中的 XML 文件以根据其内容返回不同的响应。但是,当我尝试将上传的文件保存为第一步时,我遇到了一个问题,即上传的文件被损坏。文件保存正确,但之后无法手动解压。
这是我到目前为止所做的:
创建了模拟操作和响应:我在 SoapUI 中设置了一个模拟操作以及相应的模拟响应。
用于保存文件的脚本:在 onRequest 脚本中,我使用以下 Groovy 脚本保存传入文件:
def requestContent = mockRequest.requestContent
new File("C:/test/new_container.tar.lzma").withOutputStream { it.write(requestContent.getBytes()) }
log.info "File saved successfully"
文件已保存,但已损坏。我可以打开它,但无法打开它。
尝试过的上传方法:
Postman 的内容类型:application/octet-stream
cURL 命令:
curl -X POST -H "Content-Type: application/octet-stream" --data-binary @"C:\test\container.tar.lzma" http://localhost:8080/archive-service/send/archive
在所有情况下,结果都是相同的 - 文件被损坏。 我正在寻找有关如何正确接收和保存此 LZMA 文件而不损坏的指南。任何有关可能导致此问题的原因或如何解决此问题的见解或建议将不胜感激!
提前谢谢您!
您的代码中存在问题 mockRequest.requestContent 当
tar.lzma
是二进制文件时,以字符串形式返回内容。
理想情况下,以下代码应该可以工作,但它不起作用(至少在soapui 5.4.0中):
new File("/11/out.dat").withOutputStream {
it << mockRequest.getRawRequestData()
}
new File("/11/out.dat").withOutputStream {
it << mockRequest.getHttpRequest().getInputStream()
}
soapui 5.4.0 似乎有一个错误。
任何
POST
请求转换为字符串(什么破坏了真正的二进制内容)