如何在Slack中保存用户上传的文件

How to save file uploaded by user in Slack

我正在使用 Slack Bolt Python SDK 来收集用户上传的文件。当用户将文件上传到 slack bot 应用程序时,bot 将识别该事件并且接收到的正文是这样的:

{'token': 'xxxxxxxxxxxx',
 'team_id': 'Ttttttttt',
 'enterprise_id': 'Eeeeee',
 'api_app_id': 'Aaaaaaaa',
 'event': {'type': 'message', 
           'text': '', 
           'files': [{'id': 'Fffffff', 
                      ......
                      'mode': 'snippet', 
                      'is_external': False, 
                      'external_type': '', 
                      'is_public': False, 
                      'public_url_shared': False, 
                      'display_as_bot': False, 'username': '', 
                      'url_private': 'https://url/file.xlsx', 
                      'url_private_download': 'https://url2/file.xlsx', 
                      'permalink': 'https://url3/file.xlsx', 
                      'permalink_public': 'https://url3', 
                      ......

根据返回值,如何获取文件并保存?我试过

file_path = body['event']['files'][0]['url_private_download']
urllib.request.urlretrieve (file_path, "./temple.xlsx")

但是保存的文件不是xlsx格式而是html格式。谁能告诉我如何正确保存文件?提前致谢。

您应该在请求下载文件时提供授权header:

Authorization: Bearer A_VALID_TOKEN

A_VALID_TOKEN 是一个 OAuth 令牌,具有 files.read 范围。

您可以在这里阅读更多内容:https://api.slack.com/types/file#auth

您收到的 html 文件似乎只是 Slack 在未提供授权令牌时的默认响应。