Я пытаюсь написать код Java, чтобы делать то, что эта команда делает:Java эквивалент завиток запроса поста с изображением и текстом
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);
здесь getImage (String) возвращает ByteArrayBody. (Я фактически загружаю изображение из Интернета на лету, а не читаю с диска, как команда curl, но я не думаю, что это должно измениться)
Я проверил эту ссылку, но это не так, т точно рассмотреть случай, когда вы посылаете как изображение, а также параметры текста: Java Equivalent of curl query
что странно, что я использую почти один и тот же код, чтобы сделать HTTP POST на другой API, который прекрасно работает, когда мне нужно для отправки изображения без текстовых параметров. (no stringbody)
Но когда я пытаюсь отправить как изображение (как ByteArrayBody), так и некоторый текст (как StringBody), я получаю сообщение об ошибке с сервера, которое говорит что-то вроде: 'Не удалось инициализировать объект параметра с помощью mimeType: application/octet-stream '. Это, вероятно, настраиваемое сообщение об ошибке, поэтому я не могу найти много информации об этом.
Я попытался использовать несколько других constuctors для StringBody(), поскольку этот устарел, но это не помогло. Не уверен, что использовать правильный конструктор, но не уверен, что это вызовет проблему.
Edit: Похоже, кто-то спросил очень подобный вопрос раньше, но решение не работает для меня: Android: upload file with filling out POST body together Я получаю сообщение об ошибке о Ошибка инициализации параметров с MIMETYPE: приложения/октет-поток)
Я считаю, что вам понадобится Base64Encode изображение. Взгляните на 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