簡體   English   中英

如何在Java中將此curl請求轉換為Http post請求以上傳文件?

[英]How to convert this curl request to Http post request for file upload in java?

以下是我的卷曲請求:

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 rest端點。 但是由於某種原因,當我通過Java代碼發送POST請求時,我看到data1沒有作為發布請求的一部分傳遞。 我在R中看到此錯誤。

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

我覺得我的Java等效curl實現是錯誤的。 有人可以幫忙嗎?

您可以指定內容類型application/x-www-form-urlencoded (就像在這種情況下curl一樣),但是要提供與multipart/form-data相對應的根本不同的實際主體(實體)。 而是使用URLEncodedFormEntity包含(對於您的情況)一個NameValuePair ,如下所示:

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",...)因為設置實體會自動提供content-type標頭(和content-length)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM