2016-03-31 62 views
1

我想從Yodlee getMFAResponse(它看起來像[-1,0,2,-1]等)返回的字節數組中創建一個編碼的字符串,以便我可以將它用作HTML中圖像標記的源以顯示驗證碼。 (當試圖爲金融機構獲取圖像信息時,這似乎也是一個問題)。Yodlee getMFAResponse驗證碼字節數組

爲了實現這一點,我將字節數組從響應對象中取出,並將它傳遞給btoa(),然後將它附加到一個字符串,該字符串開始於data:image/???;base64,,其中???是文件類型。我嘗試過位圖,jpeg,png,gif等,但似乎沒有任何效果。我也嘗試了'魔術字符串'方法來確定格式,但它不匹配我能找到的格式。我認爲主要的問題是我不知道文件的格式,但也許我只是沒有正確地解碼。

我結束了這樣的事情:

data:image/jpeg;base64,NjYsNzcsNTgsMTE2LDAsMCwwLDAsMCwwLDU0LDAsMCwwLDQwLDAsMCwwLC05MSwwLDAsMCw0NSwwLDAsMCwxLDAsMzIsMCwwLDAsMCwwLDQsMTE2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtNSwtMSwwLC0xLC0xLC0xLDAsLTksLTksLTksMCwtMSwtNSwtMSwwLC0xLC0xLC0xLDAsLTEsLTUsLTEsMCwtMTcsLTE3LC0xNywwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC05LC0xMywtOSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC05LC05LC05LDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMTcsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDAsLTEsLTEsLTEsMCwtMSwtMSwtMSwwLC0xLC0xLC0xLDA=' 

我在Javascript只,包括服務器端和客戶端的工作,我不知道的Java(這似乎是大多數的Yodlee公司的答案面向)。我對於解碼字節數組是否是問題,或者是否因爲我不知道正確的圖像格式而感到茫然。

回答

0

我在我的js文件上試過了你的Base64字符串。它沒有顯示圖像。我無法訪問您的js代碼btoa()。但是,我在這裏粘貼我的工作代碼,也許問題在於將byteArray轉換爲Base64。 (我正在使用Yodlee API使用c#,angularJS)。

function _arrayBufferToBase64(biteArray) { 
    var binary = ''; 
    var bytes = new Uint8Array(biteArray); 
    var len = bytes.byteLength; 
    for (var i = 0; i < len; i++) { 
     binary += String.fromCharCode(bytes[i]); 
    } 
    return window.btoa(binary); 
} 

,然後這是我如何使用它在我的js文件使用jQuery來填充<IMG />

let captchaImage64 = _arrayBufferToBase64(mfaLoginForm.fieldInfo.image); 
       let captchaImage = $('<img />', { 
        src: "data:image/png;base64," + captchaImage64, 
        class: "img img-responsive", 
        style: "margin:auto; max-width:250px; margin-bottom: 15px;" 
       }); 

let captchaContainer = $('<div />', { 
        class: "form-group row", 
        id: "captchaContainer" 
       }); 

captchaContainer.append(captchaImage); 
+0

這似乎是有前途的。您是否發現驗證碼始終採用PNG格式? –

+0

@PAckerman我認爲驗證碼格式在這個方法中並不重要。使用這種方法,所有我們需要從驗證碼是** biteArray **。上面代碼中的_PNG_只是一種顯示圖像的格式。例如,您可以將其更改爲_JPEG_,並以jpeg格式顯示圖像。重要的部分是將** byteArray **轉換爲** base64 **並將其添加到圖像的'src'屬性。 –