Отправка изображений через JSON с использованием кодировки base64

Я проверяю, можно ли отправить файл JSON с изображением или двумя. В настоящее время у меня есть изображения, преобразованные в байты, и я использую

Base64.encodeToString(temp_arr, Base64.NO_WRAP);

(это класс Android64 base64, и я должен использовать функцию .NO_WRAP, чтобы она работала после чтения других страниц переполнения стека)

преобразовать его в строку. На этом этапе я передаю этот строковый объект в мой файл JSON (с помощью библиотеки GSON) и добавляю строку туда. Эти данные будут отправлены на страницу PHP.

У меня есть тест преобразование байтов в base64 и сохранение в текстовый файл, копирование этого текстового файла на мою страницу php, запуск его через мою страницу php с помощью

 base64_decode($);

и это в состоянии правильно воссоздать изображение просто отлично (ша хэши совпадают). Так что теперь мне нужно было протестировать его, отправив по сети и используя json. Разница лишь в том, что строка base64 помещается в другой файл json, а не в текстовый файл, json отправляется в php, я беру данные и декодирую их в PHP.

теперь проблема в том, что изображение повреждено, при просмотре обоих файлов в шестнадцатеричном редакторе первые 20 строк или около того в шестнадцатеричном редакторе хорошо совпадают, но после этого они не совпадают. Как ни странно, в самом конце файлов содержатся те же данные, за исключением того, что загруженная копия содержит дополнительные символы, делающие ее больше по размеру.

Поэтому моя проблема — попытаться выяснить, может ли GSON (JSON) вызвать проблему или что-то еще, и если да, что я могу с этим поделать.

К сожалению, моя работа такова, что моему боссу необходимо, чтобы данные (json с текстом, данными и т. Д.) Отправлялись одновременно на одну и ту же php-страницу с изображениями, поэтому я отправляю изображения через json.

0

Решение

Попробуйте эту работу для меня, конвертировать изображение в base64

 public static String getStringImage(Bitmap bmp)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 60, baos);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
Log.e("SignUp", "Image Decode : " + encodedImage);
String asa = encodedImage;
return encodedImage;
}

// передать растровое изображение и вернуть строку base64

0

Другие решения

Я считаю, что нашел свое решение, проблема была в том, что Base64.encodeToString () будет кодировать байты изображений в символы, которые содержат «+», где на стороне PHP данные будут отправляться, за исключением того, что все «+» стали пробелами. Я просто должен был заменить все пробелы на +, и это сработало.

0

По вопросам рекламы [email protected]