2016-07-23 239 views
1

可能很簡單。但我無法弄清楚。 我使用科爾多瓦相機插件,它給我像下面的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後的圖像。所以編碼是正確的。

現在,我試圖在mysql中保存imageData並通過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和數據類型將告訴你所期望的格式的響應是在服務器的服務器(所以在這種情況下,服務器應該發送其JSON響應,但你也可以使用例如「text」的數據類型)

你也可以使用contentType爲「text/plain」並刪除JSON.stringify,但我沒有測試過。