Gmail API附件Base64url解码

问题描述:

我目前正试图存储所有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格式的谷歌附件?

我也从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。这有很大帮助。 –