第三方云存储应用

Microsoft Teams 可以灵活地将默认存储从 OneDrive 和 SharePoint 更改为首选的第三方云存储提供程序应用。 将文件拖放到 Teams 聊天或频道的消息撰写区域中时,可以使用Microsoft Teams JavaScript 客户端库 (TeamsJS) 允许文件存储在第三方云存储中。

先决条件

对于支持拖放文件的第三方云存储的 Teams 应用:

  • 使用最新版本的 TeamsJS SDK

  • 应用清单 (以前称为 Teams 应用清单) 必须使用第三方存储应用的应用 ID 进行配置。 搜索名为 defaultFilesUploadAppId 的属性并配置应用 ID。

    注意

    仅使用纯字符串,不要使用倒排逗号。

    或者,管理员还可以配置第三方云存储应用 ID。 有关详细信息,请参阅 文件拖放到第三方存储的管理员设置

  • 应用清单必须具有第一个作作为 Upload。 将文件拖放到邮件撰写区域中时,此作会自动在上传模式下打开应用。

    下面的代码示例显示添加为 Upload 下面的 composeExtensions第一个作:

    {
      "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.9/MicrosoftTeams.schema.json",
      "manifestVersion": "1.9",
      "version": "2.3.1",
      "id": "id",
      "developer": {
        "name": "Microsoft",
        "websiteUrl": "https://dev.botframework.com",
        "privacyUrl": "https://privacy.microsoft.com",
        "termsOfUseUrl": "https://www.microsoft.com/en-us/legal/intellectualproperty/copyright/default.aspx"
      },
      "name": {
        "short": "Third-Party Cloud Storage",
        "full": "Third-Party Cloud Storage Integration"
      },
      "description": {
        "short": "Enable drag-and-drop file uploads to third-party cloud storage.",
        "full": "This app enables seamless integration with third-party cloud storage providers for files dragged and dropped in Teams chats or channels. It uses the Microsoft Teams JavaScript SDK's thirdPartyCloudStorage module to fetch and upload files efficiently."
      },
      "icons": {
        "outline": "outline.png",
        "color": "color.png"
      },
      "accentColor": "#FFFFFF",
      "bots": [
        {
          "botId": "${{AAD_APP_CLIENT_ID}}",
          "needsChannelSelector": false,
          "isNotificationOnly": false,
          "supportsCalling": false,
          "supportsVideo": false,
          "supportsFiles": false,
          "scopes": [
            "team",
            "personal",
            "groupChat"
          ]
        }
      ],
      "composeExtensions": [
        {
          "botId": "botid",
          "canUpdateConfiguration": false,
          "commands": [
            {
              "id": "getUpload",
              "type": "action",
              "title": "Create Card",
              "description": "Example of creating a Card",
              "initialRun": false,
              "fetchTask": true,
              "context": [
                "compose"
              ],
              "parameters": [
                {
                  "name": "param",
                  "title": "param",
                  "description": ""
                }
              ]
            }
          ]
        }
      ],
      "permissions": [
        "identity"
      ],
      "validDomains": [
        "*.testApp.com"
      ]
    }
    

将文件拖放到第三方云存储

如果希望 Teams 应用具有首选的第三方存储,则必须在 getDragAndDropFiles TeamsJS SDK 中使用 的 thirdPartyCloudStorage API。 此 API 允许将文件从 Teams 聊天或频道的消息撰写区域上传到第三方存储应用。

注意

API thirdPartyCloudStorage 仅在拖放文件的情况下使用。 使用邮件撰写工具栏中的加号图标添加文件时,不使用它。

若要在 Teams 中为拖放文件实现第三方云存储,请执行以下步骤:

  1. 确保使用第三方存储应用 ID 配置属性defaultFilesUploadAppId,并在应用清单中将第一个作设置为 。Upload

  2. 使用应用程序上下文中的以下参数创建唯一 ID:

    • const uniqueIdForChats = replyToId + id (即 threadId) 。

      上述所有值都存在于应用程序上下文中。 如果 "commandContext" = "thirdParty"为 ,则可帮助第三方云存储应用确定应用是否以编程方式打开。 如果 replyToId 上下文中不存在 ,则唯一 ID 为 ""+threadId

      下图显示了应用程序上下文的示例,其中突出显示了用于创建唯一 ID 的值:

      屏幕截图显示了示例上下文,其中存在用于创建唯一 ID 的两个值。

  3. getDragAndDropFiles使用 TeamsJS SDK 中用于第三方存储应用的 API thirdPartyCloudStorage 提取拖放的文件。

  4. 实现回调函数以接收和处理文件。

    回调: (files: FilesFor3PStorage[], error?: SdkError): void;**

    以下代码示例演示回调函数:

    microsoftTeams.initialize(() => {
      microsoftTeams.getContext((context) => {
        console.log(`Context is ${JSON.stringify(context)}`);
      });
    
      let inputthreadId = "19:8c24b2ac42924ca3b8e220b3a48d8f9a@thread.v2";
      let replyChainIdforChats = "";
      const uniqueIdForChats = replyChainIdforChats + inputthreadId;
      let mediaData = [];
    
      microsoftTeams.thirdPartyCloudStorage.getDragAndDropFiles(inputthreadId, (medias, err) => {
        document.getElementById("hubState").innerText = JSON.stringify(inputthreadId);
        console.log("inside getDragAndDropFiles");
    
        if (err) {
          console.log("error while calling getDragAndDropFiles API");
          document.getElementById("getDragAndDropFiles").innerText = JSON.stringify(err);
          console.log(err);
          return;
        }
    
        console.log("no error");
        const media = medias;
        console.log(media);
    
        medias.forEach((media) => {
            console.log(`Name: ${media.name}`);
            console.log(`Type: ${media.type}`);
            console.log(`Size: ${media.size}`);
    
            mediaData.push({
                name: media.name,
                type: media.type,
                size: media.size,
            });
    
            // Example 1: Bind mediaData to HTML (e.g., create a table row for each file)
            // Example 2: Add blob storage functionality for downloading the file
        });
      });
    });
    
  5. 然后,第三方云存储应用将收到的文件上传到第三方云存储。

下面介绍如何将文件上传到第三方云存储应用:

  1. 将文件拖放到邮件撰写区域中时,文件将暂时存储在 Teams 缓存中。

  2. 第三方云存储应用使用 uniqueID 调用 getDragAndDropFiles API 来提取拖放的文件。

  3. API thirdPartyCloudStorage 返回拖放的文件。

  4. 文件通过回调函数在第三方云存储应用中接收。

  5. 然后,第三方云存储应用将文件上传到其存储。

代码示例

示例名称 Description Node.js .NET Python
第三方云存储 演示如何为在消息撰写区域中拖放的文件实现第三方云存储应用。 View View View

另请参阅

应用部件清单