You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Outlook插件:突破addFileAttachmentFromBase64Async大小限制方案咨询

问题分析与解决方案

你对addFileAttachmentAsync的用法错误

addFileAttachmentAsync要求传入的是可被Outlook客户端正常访问的公共HTTP/HTTPS URI,浏览器生成的blob: URL是本地临时资源地址,仅在当前浏览器会话内有效,Outlook(尤其是桌面客户端)无法跨进程访问这个本地地址——哪怕你去掉blob:前缀,剩下的内容依然是本地标识,不是公共可访问的URI,所以调用必然失败。

无需公共URI突破大小限制的可行方案

1. 仅针对Outlook Web App(OWA)的临时方案

在OWA环境中,因为插件和Outlook运行在同一浏览器上下文里,你可以尝试直接传入完整的blob: URL(不要截取前缀),OWA有可能识别并读取本地blob资源。示例代码:

const blobUrl = URL.createObjectURL(yourFileBlob);
Office.context.mailbox.item.addFileAttachmentAsync(
  blobUrl,
  "你的文件名.ext",
  {},
  (result) => {
    if (result.status === Office.AsyncResultStatus.Succeeded) {
      console.log("附件添加成功");
    } else {
      console.error("添加失败:", result.error.message);
    }
  }
);

注意:这个方法仅在OWA中有效,桌面端Outlook完全不支持。

2. 全客户端通用方案:使用Outlook REST API分块上传

这是目前唯一能在所有Outlook客户端(Web/桌面/移动端)中,无需公共URI即可突破25MB限制的方法,核心是通过REST API的分块上传能力实现大附件添加:

  1. 获取REST API访问令牌:
Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, (tokenResult) => {
  if (tokenResult.status !== Office.AsyncResultStatus.Succeeded) {
    console.error("获取令牌失败:", tokenResult.error);
    return;
  }
  const accessToken = tokenResult.value;
  const itemId = Office.context.mailbox.item.itemId;
  // 下一步调用分块上传接口
});
  1. 分块上传附件:
    • 先调用POST /me/messages/{itemId}/attachments/createUploadSession创建上传会话;
    • 分块发送文件内容到会话返回的上传URL;
    • 最后完成会话,附件会自动关联到当前邮件。

这种方式没有单个附件的大小限制,且完全不需要依赖公共URI。

补充说明

目前Office.js原生的addFileAttachmentFromBase64Async确实存在25MB的硬限制,没有官方捷径可以绕过这个限制而不使用公共URI或REST API。

内容的提问来源于stack exchange,提问作者lfdevjmp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:05:08