Я проверяю, можно ли отправить файл 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.
Попробуйте эту работу для меня, конвертировать изображение в 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
Я считаю, что нашел свое решение, проблема была в том, что Base64.encodeToString () будет кодировать байты изображений в символы, которые содержат «+», где на стороне PHP данные будут отправляться, за исключением того, что все «+» стали пробелами. Я просто должен был заменить все пробелы на +, и это сработало.