【问题标题】:Download file generated in MS Teams tab下载 MS Teams 选项卡中生成的文件
【发布时间】:2021-01-26 01:23:08
【问题描述】:

我正在构建一个 MS Teams 应用程序,它应该在选项卡中运行。如何让用户下载客户端生成的应用程序中的文件?在 Teams 外部运行的普通 Web 应用程序中,我可以使用 https://github.com/eligrey/FileSaver.js 中的 saveAs 功能,但它似乎不适用于 Teams 选项卡。

我也尝试过使用 microsoftTeams.openFilePreview(...) 函数并将 objectUrl 设置为数据 Url,但它似乎也不起作用。

有什么建议吗?

【问题讨论】:

  • 如果您想在 Teams 选项卡中查看/下载 pdf 文件,请确保您的 URL 是 iframe。
  • “确保您的网址是 iframe”是什么意思?我应该创建一个 iframe 并将 src 属性设置为我的数据 URL 吗?
  • 是的,当用户点击下载按钮时,它将在 teamFileViewer 中打开,如果数据 URL 是 iframe,您可以下载

标签: javascript microsoft-teams


【解决方案1】:

你可以试试下面的代码,

var ifrm = document.createElement("iframe");

    ifrm.setAttribute("src", "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf");
    ifrm.style.width = "640px";
    ifrm.style.height = "480px";
    document.body.appendChild(ifrm); 
    return ifrm;

我已经实现并测试了上面的代码,它按预期工作。

【讨论】:

  • 代码中的 actionData_URL 是否意味着我的数据 url(例如 data:application/pdf;base64,JVBERi0xLjMKJbrfrOAKMyAwIG9iago8PC9UeXB ....)?什么是前缀?这应该与 microsoftTeams.openFilePreview 一起使用吗?
  • 示例:new AdaptiveOpenUrlAction() {​​ Title = actionText, Url = new Uri(GetFileViewerURL("Your File URL here", "pptx")) }​​;
  • 我的团队应用是一个使用 @microsoft/teams-js 包 (docs.microsoft.com/en-us/javascript/api/@microsoft/teams-js/…) 的 SPA,因此它无法访问您所引用的 C# 类。如果您提到的 actionData_URL 是格式 data:application/pdf;base64,JVBERi0xLjMKJbrfrOAKMyAwIG9iago8PC9UeXB... 的数据 url,您能否告诉我?
  • 你能不能试试下面的代码, var ifrm = document.createElement("iframe"); ifrm.setAttribute("src", "w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/…); ifrm.style.width = "640px"; ifrm.style.height = "480px"; document.body.appendChild(ifrm); return ifrm; 我已经实现并且测试了上面的代码,它按预期工作。请从答案部分获取代码。
  • 上面的代码也适用于我的代码,但是如果我用我需要下载的数据 url 替换虚拟 pdf 的 url,它就不起作用。数据 url 的格式为 data:application/pdf;base64,JVBERi0xLjMKJbrfrOAKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQ...我怀疑这是因为我只能在 iframe src 中使用清单文件 validDomains 部分中列出的 url 域。是否有适用于数据 url 的解决方案?
【解决方案2】:

我无法通过 iframe 获得使用数据 url 的解决方案,但此解决方案有效:

        const link = document.createElement('a');
        link.download = filename;
        link.href = url;
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);

其中 url 是数据 url(例如 data:application/pdf;base64,JVBERi0xLjMKJbrfrOAKMyAwIG9iago8PC9UeXBlIC9QYWdlCi9QYXJlbnQ...),filename 是要下载的文件的名称。

【讨论】:

  • 它对我不起作用。您确定您已经在移动设备(Android 或 iOS)上使用 Microsoft Teams 对其进行了测试吗??
  • 我没有在移动设备上测试过,所以我不知道它是否适用于那些平台。
  • 您好,从 2022 年开始,它不适用于 Android 或 iOS。 :(
猜你喜欢
  • 2021-07-14
  • 1970-01-01
  • 2023-04-10
  • 2018-05-23
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 2023-02-02
  • 2021-03-24
相关资源
最近更新 更多