Gmail API 附件 Base64url 解码
Gmail API attachement Base64url decode
我目前正在尝试存储所有 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 格式的 google 附件?
我也从 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;
}
希望对您有所帮助。祝你好运
一个简单的参考@OriEng的方案,使用js-base64
# npm i js-base64
const Base64 = require('js-base64')
function decodeBase64(str) {
str = str.replace(/_/g, '/').replace(/-/g, '+') // important line
return Base64.atob(str)
}
我目前正在尝试存储所有 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 格式的 google 附件?
我也从 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;
}
希望对您有所帮助。祝你好运
一个简单的参考@OriEng的方案,使用js-base64
# npm i js-base64
const Base64 = require('js-base64')
function decodeBase64(str) {
str = str.replace(/_/g, '/').replace(/-/g, '+') // important line
return Base64.atob(str)
}