【发布时间】:2021-02-14 07:05:58
【问题描述】:
我想发送一个包含字节数组作为表单数据的请求。每个人都使用“文件”,但我只有“字节数组”,我不想使用任何路径。我在 curl 中的请求:
curl -F file=@file server
在java中我尝试了什么:
byte[] fileByte = Base64.decodeBase64(parameter);
ByteArrayInputStream myFile = new ByteArrayInputStream(fileByte);
MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("server");
multipartEntityBuilder.addBinaryBody("file", myFile, ContentType.APPLICATION_OCTET_STREAM, "filename");
HttpEntity multipart = multipartEntityBuilder.build();
httpPost.setEntity(multipart);
我试过了
multipartEntityBuilder.addBinaryBody("file", fileByte, ContentType.DEFAULT_BINARY, "filename");
//OR FileBody, ByteArrayEntity, InputStream or like thats
所以,这些方法对我不起作用。我怎样才能成功发送请求?
我认为问题肯定与 ByteArray 或 InputStream 有关。我必须为 my byte[] 找到另一种类型,或者使用 File 类型但没有路径在 java 中发布正确的方法。
【问题讨论】:
-
“不适合我”是什么意思?当您使用这两种替代方法运行代码时,您会得到什么行为?
-
文件/字节未成功到达服务器。示例:我发送到 1000kb 文件,但服务器上的 1b 已损坏。 *curl 工作正常。
-
我建议您尝试发布到测试服务器,例如 ptsv2.com/s/whatisthis.html,只是为了清楚公正地查看您的请求发送的内容,以排除问题与您的任何问题有关正在发送到现在。这就是我在我提供的答案中所做的。在那个答案中,我发送了一个非常简单的文本字符串。我没有你的数据,所以你可以尝试发送它并查看它是否也有效。它应该,因为二进制数据是二进制数据。
-
我刚刚注意到您正在尝试发送一个相当大的文件。也许您不应该将所有这些数据发送到 ptsv2.com 测试服务器。也许你可以只发送 1K 而不是 1M。
-
请不要回答这个问题。我已回滚/编辑您的问题并删除了答案。仅在答案部分添加答案。
标签: java httprequest