Разобрать ответ multipart / form-data в Android - PullRequest
2 голосов
/ 05 февраля 2012

Мне нужно отправить содержимое multipart / form-data на веб-сервер, а также получить и проанализировать данные multipart / form-data в ответе.Я прочитал несколько сообщений о том, как многокомпонентный контент может быть отправлен на сервер и проанализирован на сервере.Например: см. Здесь .Но я не нашел ни одного поста в Интернете, в котором говорилось бы об отправке двоичного файла и некоторых других пар ключ-значение с сервера на клиент (в моем случае действие pojo или android).Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 09 февраля 2012

Я немного подождал и не нашел ответов на свой вопрос.Я нашел решение сам.Хотя я не считаю его наиболее эффективным, он устраняет препятствия и позволяет мне продолжить.Вот решение:

На стороне отправителя (сервер или клиент): используйте org.apache.commons.codec.binary.Base64 для encodeToString (byte [] fileRepresentedAsBytes) и отправьте HTTP Content-Type = text /равнина.

На стороне получателя (сервер или клиент): используйте метод org.apache.commons.codec.binary.Base64.decode, чтобы вернуть байты [] и создать из него свой файл.

Вот код для сервлета http:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    File file = new File(<your-file-here>);
    Base64 b = new Base64();
    String fileStr = b.encodeToString(IOUtils.toByteArray(new FileInputStream(file)));
    String queryString = "file=" + fileStr + "&foo=bar";
    resp.setHeader("Content-Type", "text/plain");
    resp.getWriter().print(queryString);
    resp.getWriter().flush();
    resp.getWriter().close();
}

На стороне клиента просто используйте анализатор строки запроса из apache http utils и используйте Base64.decode.Это позволит вам передавать файл и другие текстовые параметры между клиентом и сервером.Помните, что клиент в моем случае это объект POJO, а не браузер.Вот почему я говорю, что не имеет значения, хотите ли вы отправить файл с клиента на сервер или с сервера на клиент.

Я буду счастлив изучить альтернативные, более эффективные методы, если кто-то сможет опубликовать их здесь.

...