我想編寫Java代碼做的正是這個命令的作用:相當於Java用圖片和文字捲曲POST請求的
curl -F "[email protected]" -F "param1=some-value" -F "param2=some_value" http://example.com
我目前想是這樣的:
HttpClient httpClient = HttpClientBuilder.create().build();
HttpPost poster = new HttpPost("http://example.com");
MultipartEntityBuilder mpEntityBuilder = MultipartEntityBuilder.create();
mpEntityBuilder.addPart("param1", new StringBody("some-value"));
mpEntityBuilder.addPart("param2", new StringBody("some-value"));
mpEntity.addPart("image", getImage("some-image"));
poster.setEntity(mpEntityBuilder .build());
HttpResponse response = httpClient.execute(poster);
here getImage(String)返回一個ByteArrayBody。 (實際上,我從下載的飛行網路上的圖片,而不是像從curl命令磁盤讀取,但我不認爲這應該有所作爲)
我檢查了這個鏈接,但它不」牛逼確切地址在你發送兩個圖像以及文本參數的情況: Java Equivalent of curl query
什麼奇怪的是,我使用幾乎相同的代碼,使一個HTTP POST來時,我需要工作正常另一個API單獨發送圖像而沒有任何文本參數。 (無stringbody)
但是,當我試圖同時發送的圖像(作爲ByteArrayBody)和一些文字(如StringBody),我從服務器獲取說像一個神祕的錯誤消息: 「無法使用mimeType初始化參數對象:application/octet-stream'。這可能是一個自定義的錯誤信息,所以我不能在這方面找到很多信息。
我嘗試使用StringBody()的一些其他構造函數,因爲這個不推薦使用,但它沒有幫助。不知道什麼是正確的構造函數使用,但不知道這是否會導致問題。
編輯:好像某人的問過一個非常類似的問題,但解決方案並不爲我工作: Android: upload file with filling out POST body together 我得到一個錯誤信息有關 失敗參數初始化與mime類型:應用程序/八位字節流)
我相信你會需要Base64對圖像進行編碼。看看http://stackoverflow.com/questions/5416038/uploading-image-to-server-in-multipart-along-with-json-data-in-android – GreyBeardedGeek
謝謝,我會檢查出來。但是這並不能解釋爲什麼上面的代碼可以很好地執行這個curl命令: curl -F「file」=「@ example.png」「https://example.com」 – kerouac