@xepy

Передача изображения из Android в Mysql и обратно?

Здравствуйте, пишу на Android Studio простенький чат.

Текстовую информацию (автора, текст сообщения, адресата) загоняю в HashMap, преобразую в байтовый массив. Пишу в выходной поток. Тут ничего необычного:

try {
            URL url_link = new URL("адрес обработчика данных на сайте");

            HttpURLConnection my_connect = (HttpURLConnection) url_link.openConnection();

            my_connect.setRequestMethod("POST");

            my_connect.setReadTimeout(5000);
            my_connect.setConnectTimeout(5000);

            my_connect.setDoOutput(true);
            my_connect.setDoInput(true);

            StringBuilder stringbuilder = new StringBuilder();

            HashMap<String, String> map_array = new HashMap<String, String>();

            map_array.put("user_from", user_from);
            map_array.put("user_to", user_to);
            map_array.put("text_m", text_m);
            map_array.put("img_m", img_m);           //            тут проблема
            map_array.put("create", "yes");


            for (Map.Entry<String, String> p_data : map_array.entrySet()) {
                stringbuilder.append(p_data.getKey() + "=" + p_data.getValue() + "&");
            }

            byte[] byte_arr = stringbuilder.toString().getBytes("UTF-8");

            OutputStream my_outs = my_connect.getOutputStream();

            my_outs.write(byte_arr);
            my_connect.connect();
}


Теперь дело дошло до изображений. Запускаю интент с камерой, фоткаю, фото пишу в файл, в конце получаю bitmap

И не понял как дальше действовать.

1) Пробовал кодировать в base64 строку и отправлять на сервер, с сохранением сразу в мускул. Конечно же понял что это тупо. Строка гигантская, при отправке обратно в андроид она занимает гораздо больше 64кб и не лезет в string.

ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);

byte[] bytes = byteArrayOutputStream.toByteArray();

String myl = Base64.encodeToString(bytes, Base64.DEFAULT);


2) Или мне надо на сервере декодировать base64, что то с ним потом сделать и сохранять? Может нужно как то создавать фото уже на сервере из строки через PHP GD ?

3) Или мне надо как то передавать напрямую Bitmap ?

Подскажите уважаемые эксперты куда копать, вариантов много, инфы в инете так себе, на проработку каждого варианта тратить дни не хочется. Может есть лучшие решения?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Senior .NET developer
Делайте POST, кодируйте обычным методом описанным в RFC
encoding="multipart/form-data"

Это прямой путь.
Второй вариант это используйте WebSocket и уже через него посылайте бинарные данные, как впрочем и данные в вашем чате.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
SoftAge Новосибирск
До 200 000 ₽
Drum Pads 24 Ульяновск
от 90 000 до 160 000 ₽
SoftAge Новосибирск
До 150 000 ₽