当前位置: 首页 > 知识库问答 >
问题:

Microsoft Graph API附件处理

傅胡媚
2023-03-14
        local.downloadAttachment = function (data) {
            $.get("https://graph.microsoft.com/v1.0/me/messages/" + self.EmailID() + "/attachments/" + data.id, null, function (results) {
                var bytes = new Uint8Array(results.contentBytes); // pass your byte response to this constructor
                var blob = new Blob([bytes], { type: results.contentType });// change resultByte to bytes

                //Alt method, also doesn't work but seems a lot closer to the right solution.
                //var altBytes = $.base64.decode(results.contentBytes);
                //var blob = new Blob([altBytes], { type: results.contentType });

                var link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = results.name;
                link.click();
            });
        };

任何想法都会很棒。

共有1个答案

施同
2023-03-14

谢谢@Mohit Verma,你帮我回到了正轨。但是,双重解码似乎不是确切的问题,因为下面的代码抛出了

未捕获的DomException:在“窗口”上执行“atob”失败:要解码的字符串编码不正确。

        local.downloadAttachment = function (data) {
            $.get("https://graph.microsoft.com/v1.0/me/messages/" + self.EmailID() + "/attachments/" + data.id, null, function (results) {
                var raw = window.atob(window.atob(results.contentBytes));
                var rawLength = raw.length;
                var array = new Uint8Array(new ArrayBuffer(rawLength));      // pass your byte response to this constructor

                for (var i = 0; i < rawLength; i++) {
                    array[i] = raw.charCodeAt(i);
                }

                var blob = new Blob([array], { type: results.contetType });

                var link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = results.name;
                link.click();
            });
        };

但是,由于results.ContentBytes被转换为ByteArray(这是Blob构造函数所期望的),所以这段代码可以工作。

        local.downloadAttachment = function (data) {
            $.get("https://graph.microsoft.com/v1.0/me/messages/" + self.EmailID() + "/attachments/" + data.id, null, function (results) {
                var raw = window.atob(results.contentBytes);
                var rawLength = raw.length;
                var array = new Uint8Array(new ArrayBuffer(rawLength));      // pass your byte response to this constructor

                for (var i = 0; i < rawLength; i++) {
                    array[i] = raw.charCodeAt(i);
                }

                var blob = new Blob([array], { type: results.contetType });

                var link = document.createElement('a');
                link.href = window.URL.createObjectURL(blob);
                link.download = results.name;
                link.click();
            });
        };
 类似资料:
  • 我正在尝试使用microsoft graph检查是否已签出一个onedrive文件。根据文件https://learn.microsoft.com/en-us/onedrive/developer/rest-api/resources/driveitem,存在DriveItem的发布属性。但默认情况下不返回此属性。但是文档没有提到如何检索此属性。

  • 我是微软图形API的新手。我们的应用程序要求根据预期主题收集最新电子邮件,并收集电子邮件附件(CSV格式)。 当使用下面的查询时,但是使用2个GET请求时,这已经很好了: 首先是收集最新的电子邮件: https://graph.microsoft.com/v1.0/me/messages?$select=id,有附件 第二种是通过传递从第一个查询返回的id来收集附件: https://graph.

  • 问题内容: 我正在从GWT客户端向HTTPServlet发出HTTP POST请求。该Servlet从请求内容创建PDF文件,并将其写入响应流。 响应流的标题为: 我想在用户浏览器的新窗口中打开此PDF或提示他下载它。 我应该如何处理onResponseRecieved中的响应? 问题答案: 我认为在这种情况下,您不应使用单个AJAX调用。您可以通过调用常规调用并让浏览器处理PDF响应(使用PDF

  • 我使用的是Visual Studio 2017,我安装了leanft。运行时引擎在我打开IDE时启动。第一个问题是如何使用c#以编程方式启动运行时引擎。 下一个问题围绕着这样一种情况:在运行时,当我执行代码将插件附加到chrome浏览器时,它有时会超时执行附加。我怎样才能处理得更好。基本上,我的测试会让chromdriver启动一个浏览器,然后它会尝试将leanft插件连接到正在运行的浏览器上。如

  • 问题内容: 背景 将XML文档写入浏览器的响应流,并使浏览器显示“另存为”对话框。 问题 请考虑以下方法: 在Firefox中,XML内容显示在浏览器窗口中。在IE 7中,不会显示XML内容-您必须查看文档源。两种情况都不是理想的结果。 该网页对该按钮使用以下代码: 生成的XML 并非以 开头,而是XML内容类似于: 更新#1 请注意以下代码行: 更新#2 使用是问题。一个正常的表现如预期。使用可

  • 问题内容: 我试图做到这一点,这样我的站点上的mp3可以通过单击鼠标左键来下载,而不必单击鼠标右键并另存为。因此,为此,我必须设置Content- Disposition:附件。这是我的第一个网站,所以我不知道如何实际执行此操作,但是我是在html标记中执行此操作还是在托管网站上以某种方式进行设置? 这是我的标记外观的示例。 问题答案: MP3列表示例: download.php: