2016-07-23 8 views
1

Möge es einfach. Aber ich kann es nicht herausfinden. Ich verwende cordova Kamera-Plugin, das mich wie folgende direkte base64 Daten geben ..decode base64 Bild Fehler nach Retrive aus der Datenbank

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

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

Es funktioniert. Weil es mir das Bild nach der Quelle userFullProfileImage zeigt. So ist die Codierung korrekt.

Jetzt versuche ich imageData in mysql zu speichern und es über Ajax abrufen.

Nach dem Abrufen ich mehrere Zeilen übereinstimmen und keinen Fehler gefunden. imagedata vor speichern und imagedata nach mir abrufen scheint gleich (Aber speichern Daten auslassen alle + Zeichen)

Abgerufen Bilddaten können nicht entschlüsseln. Ich benutze auch Online-Base64-Decoder. Aber keine Hoffnung. Kann fehlen + Charakter ist aus diesem Grund.

Ich habe alle anderen Zeichen geprüft, Zeile für Zeile, beide imageData sind gleich.

Also jetzt hilf mir, was bei mir der mögliche Grund sein könnte.

+0

Es gibt viele Online-Tools, um zwei Strings zu vergleichen. Stellen Sie sicher, dass beide Strings identisch sind –

+0

Es gibt ein Problem. Ausgabedatei ist nur in Alert (ImageData) Format in Mobile. Es gibt kein Druckformat, da ich sie benutze, nachdem ich diese App geschlossen habe. Kamera-Plugin funktioniert nur in mobilen. Keine Browser-Basisunterstützung. Also schreibe ich manuell einige Daten und mache einen Screenshot (sie scheinen identisch zu sein).Aber jetzt merke ich, dass sie vielleicht gar nicht gleich sind. –

Antwort

0

Mein Problem war während des Sendens von Bilddaten durch Ajax.

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

Verschlüsselte Daten werden jetzt sicher in der Datenbank gespeichert.

Nach dem Abrufen von codierten Daten aus der Datenbank habe ich gerade eine andere Funktion verwendet.

decodeURIComponent(encodedData); //same of imageData 
1

Wenn Ihre + Zeichen entfernt werden, klingt es so, als würde es ein URL-Codierungsschema durchlaufen, das + in Leerzeichen konvertieren könnte, die dann vom base64-Decoder als Leerzeichen ignoriert werden könnten. Dies könnte als Teil Ihrer AJAX-Anfrage geschehen, die standardmäßig auf application/x-www-form-urlencoded lautet.

Wenn Sie sagen, dass Sie URL-codierte Daten übermitteln werden, dann verschlüsseln Sie sie nicht, sie werden vom Server beim Empfang falsch dekodiert.

Versuchen Sie, Ihren Inhaltstyp in der AJAX-Anfrage festzulegen, z.

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

Wo content wird dem Server mitteilen, dass Sie Ihre Daten als JSON und datatype sind einreichen wird dem Server mitteilen, welches Format Sie die Antwort erwarten zu sein (so in diesem Fall der Server seine Antwort in JSON senden soll , aber Sie könnten auch einen dataType von zB "text" verwenden)

Sie könnten alternativ einen contentType von "text/plain" verwenden und JSON.stringify entfernen, aber ich habe das nicht getestet.