gpt4 book ai didi

java - 使用 ByteArray 请求多部分/表单数据

转载 作者:行者123 更新时间:2023-12-05 06:51:19 27 4
gpt4 key购买 nike

我想发送一个包含字节数组作为表单数据的请求。每个人都使用"file",但我只有“bytearray”,我不想使用任何路径。我的 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

所以,这些方法对我不起作用。我怎样才能成功发送请求?

编辑:我将 ptsv2 与 postman 和结果一起使用 -> enter image description here

当我用 java 发送相同的请求和文件时 -> enter image description here

我认为问题肯定与 ByteArray 或 InputStream 有关。我必须为我的 byte[] 找到另一种类型,或者使用文件类型但没有路径在 Java 中发布的正确方法。

最佳答案

我不知道“服务器”是什么,但问题可能出在您要发送到的服务器上。我运行了您的代码,写入了互联网上可用的公共(public) HTTP POST 测试服务器,它对我来说工作正常。这是我运行的代码:

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

class ListsTest {

public static void main(String[] args) {

byte[] fileByte = "Sample string data".getBytes(StandardCharsets.UTF_8);

MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
CloseableHttpClient client = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("https://ptsv2.com/t/r7ypk-1613291354/post");

multipartEntityBuilder.addBinaryBody("file", fileByte, ContentType.DEFAULT_BINARY, "filename");

HttpEntity multipart = multipartEntityBuilder.build();
httpPost.setEntity(multipart);

try {
client.execute(httpPost);
} catch (IOException e) {
e.printStackTrace();
}
}
}

如果您转到目标测试服务器存储桶:

https://ptsv2.com/t/r7ypk-1613291354

您可以看到服务器接收到的完整请求是什么样子的,并看到有效载荷使它成为一个具有适当文件名和内容的文件。请求显示的文件内容部分如下所示:

enter image description here

您的替代方法对我同样有效。我选择发布这个版本是因为它更简单,不需要您将字节数组包装在 InputStream 对象中。

关于java - 使用 ByteArray 请求多部分/表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66193176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com