簡體   English   中英

使用郵遞員上傳文件有效,但使用 Apache HttpClient 上傳失敗

[英]File upload with postman works but fails with Apache HttpClient

問題

我正在測試系統上使用外部 REST API。 我正在嘗試實現一個上傳路徑,並且我正在使用 Apache HTTPClient。 我使用以下郵遞員配置進行了嘗試,效果很好:

郵遞員請求

上傳工作正常。

在 Java 中的實現

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPut request = new HttpPut("../upload") // placeholder url, not the real one
    
request.setHeader("Content-type", "multipart/form-data");   
request.setHeader(HttpHeaders.AUTHORIZATION, "HEY I AM A TOKEN");       
    
FileBody fileBody = new FileBody(new File("dummy.pdf"), ContentType.create("application/pdf"));
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addPart("file", fileBody);
request.setEntity(builder.build());
    
CloseableHttpResponse response = httpClient.execute(request);

錯誤

我總是從其余的 api 中得到一個特定的錯誤:

File could not have been parsed

上傳路徑的文檔中提到了以下細節:

  • 標題 Content-Type multipart/form-data
  • 只有一個多部分元素
  • 元素的內容類型需要是 application/pdf
  • 名稱必須是“文件”

我想我在我的請求中做了這個列表的每一點 - 那么郵遞員請求和我自己的 java http 請求有什么區別?

我想念什么?

編輯:

與 OkHTTP 相同的代碼有效。 仍然不知道為什么它不適用於 Apache HttpClient。

OkHttpClient testClient = new OkHttpClient();
File testfile = new File("dummy.pdf");

RequestBody body = new MultipartBuilder().type(MultipartBuilder.FORM).addFormDataPart("file","dummy.pdf",
RequestBody.create(MediaType.parse("application/pdf"),testfile)).build();

Request testreq = new Request.Builder()
.url("../upload")
.header("Authorization", "HI I AM A TOKEN")
.put(body)
.build();
Response testres = testClient.newCall(testreq).execute();

我不得不刪除這一行

request.setHeader("Content-type", "multipart/form-data");   

使其工作。 我真的不知道為什么,所以如果有人能幫我解決這個問題並給出一些解釋,我願意。 目前我很高興,因為它現在有效。

暫無
暫無

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

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