问题描述
我正在开发Thunderbird扩展程序,可以上传邮件中的附件。扩展流程如下:
- 单击扩展程序图标将显示一个弹出窗口,用于选择“全部读取”,“已读选定内容”和“未读读取”选项之一
- 当我选择包含附件的电子邮件并选择“读取所选”选项时,将触发“读取所选”
onclick
事件的侦听器。 -
onclick
侦听器将消息发送到后台脚本以处理上传
这是我到目前为止的代码:
popup.js
async function readSelected() {
// this function is invoked by the listener
const msgList = await browser.mailTabs.getSelectedMessages();
if(msgList.messages) {
await browser.runtime.sendMessage({
caller: 'readSelected',messages: msgList.messages
});
}
}
background.js
browser.runtime.onMessage.addListener((req,sender,res) => {
// messages is an Array of MessageHeader objects
const { caller,accounts,all,messages } = req;
// ... code for handling other cases
console.log('Reading selected');
console.log(messages);
const ids = [];
for(const msg of messages) {
ids.push(msg.id);
}
// maps all ids to promises that resolves to MessagePart objects
Promise.all(ids.map(id => browser.messages.getFull(id)))
.then(messages => {
console.log(messages);
}).catch(e => console.error(e));
});
在background.js
的控制台中,我看到每个MessagePart
对象都有一个parts
数组,而该数组又是MessagePart
对象的数组。我可以看到附件的名称(在我的情况下,所选邮件将DOCX文件作为附件)。问题是,如何获取文件?我需要二进制文件数据,因为在将其上传到远程服务器之前,需要将其转换为Base64字符串。我查看了以下SO帖子:post1和post2,但是由于这些帖子都建议使用需要URI的nsIFile
接口,因此我不确定其工作原理。提供的部分没有此类URI。
如果需要更多信息,请在评论中问我,我将更新问题(其余代码大部分用于处理对上面(1)中讨论的其他选项的调用)。一些准则和帮助将不胜感激。谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)