HTTPS流我有一個REST服務採用https接受文件上傳的多連接(即元數據文件和文件本身)REST服務 - 多個部分的POST(JSON和文件)上使用澤西
我怎麼能使用Jersey(用於websphere)或HttpClient調用REST服務並將文件作爲多部分發送。我希望將文件發送爲多個不同大小的流,因爲我們可以使文件超過1GB。此外,REST服務正在使用Windows NT身份驗證進行授權,並且位於https上。
任何人都可以舉例說明我如何實現這一目標?我使用了多部分httpClient。以流的形式發送它不起作用。以下是我的代碼使用httpClient 4.5.2
====================================
InputStream stream = new FileInputStream("test.doc");
MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setStrictMode();
InputStreamBody streamBody = new InputStreamBody(stream, docHandler.getFilename());
FormBodyPart filePart = FormBodyPartBuilder.create()
.setName("Binary")
.addField(Constants.RETRIEVAL_NAME_FIELD, "test.doc")
.addField("Content-Type",docHandler.getContentType())
.setBody(streamBody)
.build();
entityBuilder.addPart(filePart);
HttpPost httpPostRequest = new HttpPost();
httpPostRequest.setEntity(entityBuilder.build());
httpClient.execute(httpPostRequest);
==================================== 但是,當我執行此代碼時,我收到以下錯誤
org.apache.http.client.NonRepeatableRequestException:爲什麼我收到這個錯誤不能與非重複的請求實體
重試請求的任何想法。如果我將流轉換爲字節數組並使用ByteArrayBody代替,那麼它工作正常,但我注意到在Fiddler中有三個請求調用正在對服務器進行,並且在每次調用中都會複製文件的全部內容。所以,如果我的文件是1GB,那麼整個內容將被髮送到服務器三次。
首先,如何實現以大塊或多個流發送大文件,以便在一次調用中不發送整個文件。其次,有沒有辦法避免3次調用服務器進行NTLM身份驗證?
任何指針?
乾杯!
[Jersey 2 Multipart upload client]可能重複(https://stackoverflow.com/questions/24637038/jersey-2-multipart-upload-client) – andih
嗨andih,這個鏈接是使用簡單的http連接,並沒有有認證。在我的情況下,RESTful服務在https上,並使用NTLM身份驗證機制。有沒有什麼好的例子可以通過https使用NTLM認證機制通過REST服務將文件上傳爲流(我是inputstream)?另外,我們有運行客戶端Java應用程序的websphere。服務器在.Net中實現。 – sab123
Apache HTTP客戶端支持http和https。在大多數情況下,你甚至不需要修改你的代碼。 NTLM身份驗證是http(s)的「頂部」。 Apache Http客戶端版本> 4.1(4.2.3)支持[NTLM](https://hc.apache.org/httpcomponents-client-ga/ntlm.html)。看起來你在一個問題中詢問不同的事情。塊上載如何重複。 NTLM認證方案在[這裏]描述(https://www.innovation.ch/personal/ronald/ntlm.html)。如果你能避免這三個電話。答案是否定的。你應該問更具體的問題。 – andih