Поскольку HttpServlet
обычно прослушивает HTTP-запросы, вы хотите использовать кодировку multipart/form-data
для отправки двоичных данных по HTTP, а не в необработанном виде (без форматирования), как это.
Со стороны клиента вы можете использовать URLConnection
для этого, как описано в этом мини-учебнике , но это будет довольно многословно. Для этого вы также можете использовать Apache HttpComponents Client . Это добавляет, однако, дополнительные зависимости, я не уверен, что вы хотели бы иметь это на Android.
Затем на стороне сервера вы можете использовать Apache Commons FileUpload , чтобы проанализировать элементы из тела запроса, закодированного в multipart/form-data
. Вы можете найти пример кода в этом ответе как должен выглядеть doPost()
сервлета.
Что касается вашего примера кода: перенос в DataOutputStream
не требуется. Вы не пользуетесь услугами DataOutputStream
. Вы просто используете write(byte[])
метод, который уже предоставлен базовым OutputStream
, возвращаемым URLConnection#getOutputStream()
. Кроме того, Bitmap
имеет метод compress()
, который можно использовать для его сжатия с использованием более стандартного и понятного формата (PNG, JPG и т. Д.) В произвольный OutputStream
. Э.Г.
output = connection.getOutputStream();
// ...
bitmap.compress(CompressFormat.JPEG, 100, output);
Сделайте это вместо output.write(bytes)
как в вашем коде.