Gal*_*tor 9 javascript gmail-api
我正在创建一个使用gmail api阅读我的电子邮件的网络应用程序.所有方法都在工作(users.messages.list,users.messages.get等),并在console.log和我的页面HTML中显示.有一点我注意到我必须使用atob来解码body.data并在我的HTML中插入.现在我要下载或阅读为例附件file.docx,和我使用本例这里我注意到,我有过解码后的回调,但如果我这样做,有没有链接只下载或阅读,微软一些代码.如果我复制此代码并创建文档并粘贴它,则表示文件已损坏.
我的代码:
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>');
});
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
我在这里找到了解决方案
小智 6
试试这个解决方案。
HTML
<a id="download-attach" download="filename"/>
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3126 次 |
| 最近记录: |