2016-07-23 4 views
1

Пусть это будет легко. Но я не могу понять это. Я использую Cordova камеры плагин, который даст мне данные прямые base64, как следующий ..декодировать base64 изображение не удается после извлечения из базы данных

navigator.camera.getPicture(onSuccess, onFail, {quality: 50, 
    destinationType: Camera.DestinationType.DATA_URL}); 

function onSuccess(imageData) { 
    $('#userFullProfileImage').attr('src', "data:image/jpeg;base64," + imageData); 
} 

Он работает. Потому что он показывает мне изображение после заданного источника userFullProfileImage. Итак, кодировка верна.

Теперь, я пытаюсь сохранить imageData в mysql и получить его через ajax.

После извлечения я сопоставляю несколько строк и не обнаружил ошибки. ImageData перед сохранением и ImageData после извлекать мне кажется, то же самое (но сохранить данные опускаем все + характер)

данные, полученные изображения не может декодировать. Я также использую онлайн-декодер base64. Но нет надежды. Может быть, отсутствует + знак по этой причине.

Я проверил все остальные символы, по строкам, как imageData - это то же самое.

Так что теперь помогите мне, что может быть возможным причинам в моем случае.

+0

Существует множество онлайн-инструментов для сравнения двух строк. Убедитесь, что по крайней мере обе строки одинаковы. –

+0

Возникла проблема. Выходной файл доступен только в формате alert (imageData) на мобильном устройстве. Нет никакого формата печати, поскольку я использую их после закрытия этого приложения. плагин камеры работает только на мобильных устройствах. Нет поддержки базы браузеров. Поэтому я пишу вручную некоторые данные и снимаю скриншот (они кажутся одинаковыми).Но теперь я понимаю, что они могут быть совсем не такими. –

ответ

0

Моя проблема была во время отправки данных изображения через ajax.

encodeURIComponent(imageData); //This solve my problem. 

Закодированные данные теперь безопасно сохраняются в базе данных.

После извлечения из закодированных данных из базы данных я только что использовал другую функцию.

decodeURIComponent(encodedData); //same of imageData 
1

Если ваши символы + будут удалены, похоже, что он использует схему кодирования URL-адресов, которая может преобразовывать + в пробелы, которые затем можно игнорировать как пробел с помощью декодера base64. Это может происходить как часть вашего запроса AJAX, по умолчанию используется application/x-www-form-urlencoded.

Если вы скажете, что собираетесь отправлять данные с кодировкой url, тогда не кодируйте его, он будет неправильно декодирован сервером при получении.

Попробуйте настроить свой тип контента в запросе AJAX, например.

$.post({ 
    url: yourUrl, 
    data: JSON.stringify(yourBase64string), 
    contentType: "application/json", 
    dataType: "json" 
}); 

Где CONTENTTYPE сообщит серверу, что вы отправляете свои данные в виде JSON и DATATYPE сообщит серверу, какой формат вы ожидаете ответа быть в (так как в этом случае сервер должен отправить свой ответ в формате JSON , но вы также можете использовать dataType, например, «текст»)

В качестве альтернативы вы можете использовать contentType «text/plain» и удалить JSON.stringify, но я не тестировал это.

Смежные вопросы