【问题标题】:MS Teams bot - how to download file that was uploaded in teams from nodejs codeMS Teams bot - 如何从 nodejs 代码下载在团队中上传的文件
【发布时间】:2022-08-05 04:15:20
【问题描述】:

我正在使用团队机器人 api。 我们希望支持图像 - 代理将在团队机器人对话中上传图像,图像将被发送到我们的服务器并转换为 base64 返回给用户。

我的服务器收到的请求:

{\"text\":\"发送文件\",\"textFormat\":\"plain\",\"attachments\":[{\"contentType\":\"application/vnd.microsoft.teams. file.download.info\",\"content\":{\"downloadUrl\":\"https://-my.sharepoint.com/personal//_layouts/15/download.aspx?UniqueId=2f**b&翻译=假&tempauth=&ApiVersion=2.0\",\"uniqueId\":\"\",\"fileType\":\"pdf\"},\"contentUrl\":\"https://-my.sharepoint.com/personal/*/Documents/Microsoft 团队聊天 文件/myFile.pdf\",\"name\":\"myFile.pdf\"},{\"contentType\":\"text/html\",\"content\":\"<p>发送文件</p>\"}],\"type\":\"message\",\"timestamp\":\"2022-07-25T11:13:17.7731472Z\"....... }

这是我的代码:

if (message.attachments) {
   const file = message.attachments.find(a => a.contentType === \"application/vnd.microsoft.teams.file.download.info\");
   if (file) {
         require(\'request\').get({uri: file.content.downloadUrl, encoding: null}, function (err, res, body) {
            if (!err && res.statusCode === 200) {
                const base64Data = \"data:\" + res.headers[\"content-type\"] + \";base64,\" + new Buffer(body).toString(\'base64\'); 
            } else console.log(err ? err : \"statusCode: \" + res.statusCode);
        });          
   }}

但是我得到了“statusCode:403”。

从文档看来,该 URL 应该可以工作:

content.downloadUrl 是下载文件的预认证链接。 要获取文件的内容,请向 URL 发送 GET 请求 在 content.downloadUrl 中。该 URL 仅在几分钟内有效,因此 您必须立即获取文件。

  • 你能分享一下你指的是哪个样本吗?
  • @Nivedipa-MSFT 你能看一下吗?
  • @user2503775 - 您能否检查一下您是否配置了适当的权限来访问 downloadURL,因为它需要身份验证?
  • 我是否需要基于 BOT 凭据或使用机器人的用户的凭据的令牌? @ChetanSharma-msft

标签: node.js microsoft-teams


【解决方案1】:

我发现了问题。

downloadUrl 确实必须是公开的,问题是我们的 nodejs 代码在每个输入上都使用 sanitazion 以确保安全 -

expressSanitized.middleware({encoder: 'XSSEncode'})

sanitazion 添加了“&amd;”到downloadUrl -

https://***.sharepoint.com/personal/****/_layouts/15/download.aspx?UniqueId=5c****c344&amp;Translate=false&amp;tempauth=eyJ0e........AwMDAwMDAv

这就是为什么我得到403....

我添加了 unescape 函数来删除 & 现在它可以工作了。

【讨论】:

    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多