Gmail API附件Base64url解码

1 javascript gmail base64 node.js gmail-api

我目前正试图来存储所有的Gmail电子邮件attachement,巫婆在base64url(编码https://developers.google.com/gmail/api/v1/reference/users/messages/attachments)。

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();
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,当我将消息存储在文件中或S3中,并尝试以良好的格式读取消息时,我什么也看不到,图像编辑器的gimp表示图像已损坏。我究竟做错了什么 ?我真的丢了,我怎么能在解码格式base64url谷歌的attachement?

Ori*_*Eng 5

我也得到Gmail和成功附件保存:在设置Blob对象的基础-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;
}
Run Code Online (Sandbox Code Playgroud)

希望它的会帮助你。祝好运