javascript - Gmail API 附件 Base64url 解码

标签 javascript node.js gmail base64 gmail-api

我目前正在尝试存储所有 gmail 电子邮件附件,女巫在 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();
    }
});

但是当我将消息存储在一个文件或我的 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;
}

希望对您有所帮助。祝你好运

关于javascript - Gmail API 附件 Base64url 解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42648270/

相关文章:

javascript - 检查 typescript 中的 null

javascript - 为什么节点编译比那样大?

javascript - 为什么onclick事件会导致ibook电子书阅读器中的翻页事件?

按 F5 时使用 Javascript 函数代替刷新

Java - SSL - 使用 gmail 的 SMTP 服务器进行身份验证

zend-framework - IMAP "Invalid Credentials"通过 GMail XOAUTH

javascript - 如果没有被拒绝, promise 链式结果

php - 如何从服务器接收更新而不每隔 n 秒请求一次

javascript - 'temp' 中的未知列 'field list'

html - 强制 Gmail for iPhone 以指定的宽度呈现表格单元格?