java—如何在post请求的主体中发送文件?太棒了

jjjwad0x  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(627)

我有一个字节数组的文件。我想把它放在邮件请求的正文里。
我在javascript中有一个很好的例子。不能在groovy中重复相同的代码。服务器返回“初始服务器错误”。我确信问题出在传递的数据类型上。
groovy代码:

def reqParams = [:];
reqParams.filename = 'test.pdf'
reqParams.filedata = utils.readFileContent(obj.clientFile) // array of byte
reqParams.destination = 'test'

def jsonBody = new JsonBuilder(reqParams).toString()

// build HTTP POST

def client = new RESTClient(baseUrl)
client.auth.basic 'user1', 'user1'
def resp = client.post(body : jsonBody, contentType: JSON)

使用help js生成请求的示例正文:

Content-Type: multipart/form-data; boundary=--------------------------295349461296500421390407
Content-Length: 659
----------------------------295349461296500421390407
Content-Disposition: form-data; name="filedata"; filename="query.txt"

<query.txt>
----------------------------295349461296500421390407
Content-Disposition: form-data; name="destination"

workspace://SpacesStore/716afb88-715a-4413-85bc-f71630abfd51
----------------------------295349461296500421390407
Content-Disposition: form-data; name="filename"

jasperTextToNextStrin.txt

----------------------------295349461296500421390407--

如何使用groovy发送post请求?

envsm3lx

envsm3lx1#

json格式本机不支持二进制数据。要在json负载中发送二进制数据,您需要以某种方式将其编码为文本。
您应该使用什么编码取决于服务器的期望。
常见的编码是base64编码:

reqParams.filedata = myFile.bytes.encodeBase64().toString()

reqParams.filedata = utils.readFileContent(obj.clientFile).encodeBase64().toString()

如果 readFileContent 确实返回一个 byte[] .

相关问题