gpt4 book ai didi

java - java中如何将这个curl请求转换为Http post请求进行文件上传?

转载 作者:行者123 更新时间:2023-12-02 10:34:48 25 4
gpt4 key购买 nike

以下是我的 curl 请求:

curl -X POST --data-urlencode 'data1@/Users/Documents/file.csv' http://localhost:8000/predict

以下是我的等效 Java 实现。

String filePath = inputFilePath;
String url = inputUrl;
File file = new File(filePath);
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost uploadFile = new HttpPost(inputUrl);
uploadFile.addHeader("content-type", "application/x-www-form-urlencoded;charset=utf-8");

MultipartEntityBuilder builder = MultipartEntityBuilder.create();

FileBody fileBody = new FileBody(new File(inputFilePath));

HttpEntity reqEntity = MultipartEntityBuilder.create()
.addPart("data1", fileBody)
.build();


uploadFile.setEntity(reqEntity);
CloseableHttpResponse response = null;
try {
response = httpClient.execute(uploadFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

我正在尝试从我的 Java HTTP 帖子调用我的 R Rest API 端点。

#* @post /predict
mypredict <- function(data1) {
print(data1)

}

(1) 我的等效 Java HTTP Post 请求正确吗?(2) 我可以使用curl 命令调用R 休息端点。但由于某种原因,当我通过 Java 代码发送 POST 请求时,我发现 data1 没有作为 post 请求的一部分传递。我在 R 中看到此错误。

<simpleError in print(data1): argument "data1" is missing, with no default>

我觉得我的Java等效curl实现是错误的。有人可以帮忙吗?

最佳答案

您指定内容类型application/x-www-form-urlencoded(就像curl在本例中所做的那样),但提供与multipart/form-相对应的实际主体(实体) data 这是完全不同的。相反,使用包含(针对您的情况)一个NameValuePairURLEncodedFormEntity,如下所示:

byte[] contents = Files.readAllBytes (new File(filepath).toPath());
List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
list.add(new BasicNameValuePair("data1", new String(contents,charset));
uploadFile.setEntity(new UrlEncodedFormEntity (list));

并且您不需要 addHeader("content-type",...) 因为设置实体会自动提供内容类型 header (和内容长度)。

关于java - java中如何将这个curl请求转换为Http post请求进行文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53369539/

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