在 SoapUI 中通过 REST 服务上传 LZMA 文件时出现文件损坏问题

问题描述 投票:0回答:1

我正在 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
  • 将前面两种方法中的Content-Type更改为application/x-lzma

在所有情况下,结果都是相同的 - 文件被损坏。 我正在寻找有关如何正确接收和保存此 LZMA 文件而不损坏的指南。任何有关可能导致此问题的原因或如何解决此问题的见解或建议将不胜感激!

提前谢谢您!

rest file groovy soapui lzma
1个回答
0
投票
  1. 您的代码中存在问题 mockRequest.requestContent

    tar.lzma
    是二进制文件时,以字符串形式返回内容。

  2. 理想情况下,以下代码应该可以工作,但它不起作用(至少在soapui 5.4.0中):

new File("/11/out.dat").withOutputStream { 
    it << mockRequest.getRawRequestData()
}
  1. 然后我尝试了以下操作 - 但它仅适用于 PUT 请求:
new File("/11/out.dat").withOutputStream { 
    it << mockRequest.getHttpRequest().getInputStream() 
}

soapui 5.4.0 似乎有一个错误。

任何

POST
请求转换为字符串(什么破坏了真正的二进制内容)

© www.soinside.com 2019 - 2024. All rights reserved.