簡體   English   中英

Java等同於帶有圖像和文本的curl發布請求

[英]Java equivalent of curl post request with image and text

我正在嘗試編寫Java代碼來完全執行此命令的作用:

curl -F "image=@image.jpg" -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);

getImage(String)返回一個ByteArrayBody。 (我實際上是在網上即時下載圖像,而不是像curl命令一樣從磁盤讀取圖像,但是我認為這不會有所作為)

我檢查了此鏈接,但它不能完全解決您同時發送圖像和文本參數的情況: Java等同於curl查詢

奇怪的是,我使用幾乎相同的代碼將HTTP發布到另一個API,當我需要單獨發送不帶任何文本參數的圖像時,它可以正常工作。 (無弦體)

但是,當我嘗試同時發送圖像(作為ByteArrayBody)和一些文本(作為StringBody)時,我從服務器收到一條神秘的錯誤消息,內容如下:'無法使用mimeType初始化參數對象:application / octet -流'。 這可能是自定義錯誤消息,因此我實際上找不到太多信息。

我不建議使用StringBody()的其他一些構造函數,因為已棄用該構造函數,但它沒有幫助。 不確定使用什么正確的構造函數,但不確定是否會引起問題。

編輯:之前似乎有人問過一個非常類似的問題,但是該解決方案對我不起作用: Android:一起填寫POST正文上傳文件我收到有關mimeType參數初始化失敗的錯誤消息:application / octet-stream)

我沒有看到它的文檔,但是curl -F @顯然試圖對某些擴展名/后綴(包括.jpg image/jpeg 填充Content-type有所幫助。 HttpClient不會,並且將所有內容默認設置為MIME“我不知道”,類型為application/octet-stream ,這可能會導致您的錯誤。 使用設置內容類型的3-arg ctor

new ByteArrayBody (data, ContentType.create("image/jpeg"), null)

或者,如果您要指定filename屬性,而curl -F @也會這樣做,但是Web服務器(與瀏覽器不同) 通常並不在意,請提供String代替第三個null

暫無
暫無

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

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