gpt4 book ai didi

javascript - 如何使用 javascript 从 gmail api 下载附件?

转载 作者:数据小太阳 更新时间:2023-10-29 03:55:38 26 4
gpt4 key购买 nike

我正在创建一个网络应用程序来使用 gmail api 阅读我的电子邮件。所有方法都有效(users.messages.list、users.messages.get 等)并显示在 console.log 和我的页面 HTML 中。我注意到一件事,我必须使用 atob 来解码 body.data 并插入我的 HTML 中。现在我必须下载或阅读示例 file.docx 的附件,我正在使用此示例 here回调后我注意到我也必须解码,但如果我这样做,没有下载或阅读的链接,只有来自 microsoft word 的一些代码。如果我复制这段代码并创建一个文档并粘贴它,说文件已损坏。

我的代码:

function getAttachments(messageID, parts, callback) {
//console.log(parts);
var attachId = parts.body.attachmentId;
var request = gapi.client.gmail.users.messages.attachments.get({
'id': attachId,
'messageId': messageID,
'userId': 'me'
});
request.execute(function (attachment) {
callback(parts.filename, parts.mimeType, attachment);
});
}

if (att.length > 0) {
for (var i in att) {
getAttachments(response.id, att[i], function (filename, mimeType, attachment) {
console.clear();
console.log(filename, mimeType, attachment);
console.log(atob(attachment.data.replace(/-/g, '+').replace(/_/g, '/')));
inline.append('<a href="" style="display: block">' + filename + '</a>');
});
}
}

更新

我找到了解决方案 here

最佳答案

试试这个解决方案。

HTML

<a id="download-attach" download="filename"/>

JS

function getAttachments(messageID, parts, callback) {
var attachId = parts.body.attachmentId;
var request = gapi.client.gmail.users.messages.attachments.get({
'id': attachId,
'messageId': messageID,
'userId': 'me'
});
request.execute(function (attachment) {
callback(parts.filename, parts.mimeType, attachment);
});
}

if (att.length > 0) {
for (var i in att) {
getAttachments(response.id, att[i], function (filename, mimeType, attachment) {

let dataBase64Rep = attachment.data.replace(/-/g, '+').replace(/_/g, '/')

let urlBlob = b64toBlob(dataBase64Rep, mimeType, attachment.size)

let dlnk = document.getElementById('download-attach')
dlnk.href = urlBlob
dlnk.download = filename
dlnk.click()
URL.revokeObjectURL(urlBlob)
}
}

function b64toBlob (b64Data, contentType, sliceSize) {
contentType = contentType || ''
sliceSize = sliceSize || 512

var byteCharacters = atob(b64Data)
var byteArrays = []

for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize)

var byteNumbers = new Array(slice.length)
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i)
}

var byteArray = new Uint8Array(byteNumbers)

byteArrays.push(byteArray)
}

var blob = new Blob(byteArrays, {type: contentType})
let urlBlob = URL.createObjectURL(blob)
return urlBlob
}

关于javascript - 如何使用 javascript 从 gmail api 下载附件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33812718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com