2017-03-07 141 views
0

我目前正試圖存儲所有gmail電子郵件附件,女巫編碼爲base64url(https://developers.google.com/gmail/api/v1/reference/users/messages/attachments)。Gmail API附件Base64url解碼

gmail.users.messages.attachments.get({ 
    'auth': auth, 
    'userId': 'me', 
    'id': 'attachementId', 
    "messageId": 'messageId' 
}, function(err, response, seg) { 
    if (err) { 
     // 
    } else { 
     var base64_attachement = response.data.replace(/-/g, '+').replace(/_/g, '/').replace(/ /g, '+'); 
     var buffer = new Buffer(base64_attachement, "base64"); 
     var attachementDecode = buffer.toString(); 
    } 
}); 

但是,當我在一個文件中或在我的S3消息存儲和我嘗試閱讀(具有良好的格式),我什麼都看不到,和圖像編輯器如GIMP說這就是形象被破壞。 我在做什麼錯?我真的失去了如何解碼base64url格式的谷歌附件?

回答

1

我也從gmail獲得附件併成功保存它們:在Blob對象中設置base-64,然後使用FileSaver庫輕鬆地將文件保存到計算機中。

代碼:

var base64=(response.data).replace(/_/g, '/'); //Replace this characters 
base64=base64.replace(/-/g, '+'); 
var base64Fixed = fixBase64(base64); 
var blob = new Blob([base64Fixed], { type: "image/png" }); //set your file type! 
saveAs(blob,"name of file"); //Using FileSaver library 


function fixBase64(binaryData) { 
    var base64str = binaryData// base64 string from thr response of server 
    var binary = atob(base64str.replace(/\s/g, ''));// decode base64 string, remove space for IE compatibility 
    var len = binary.length;   // get binary length 
    var buffer = new ArrayBuffer(len);   // create ArrayBuffer with binary length 
    var view = new Uint8Array(buffer);   // create 8-bit Array 

    // save unicode of binary data into 8-bit Array 
    for (var i = 0; i < len; i++) 
     view[i] = binary.charCodeAt(i); 

return view; 
} 

。希望它會幫助你。祝你好運

+0

謝謝你的幫助!它幫助了我很多,現在我的代碼可以工作,並且文件被正確地發送到S3 –

+0

我很樂意提供幫助! :) 祝你好運! – OriEng

+0

謝謝@OriEng。這有很大幫助。 –