【问题标题】:How to upload files to slack using file.upload and requests如何使用 file.upload 和 requests 将文件上传到 slack
【发布时间】:2017-04-18 06:14:51
【问题描述】:

我已经搜索了很多,但我没有找到我正在寻找的答案。

我正在尝试使用 python 请求将文件从 /tmp 上传到 slack,但我不断收到 {"ok":false,"error":"no_file_data"} 返回。

file={'file':('/tmp/myfile.pdf', open('/tmp/myfile.pdf', 'rb'), 'pdf')}
payload={
        "filename":"myfile.pdf", 
        "token":token, 
        "channels":['#random'], 
        "media":file
        }

r=requests.post("https://slack.com/api/files.upload", params=payload)

主要是尝试遵循here发布的建议

【问题讨论】:

  • 我在 API 文档中没有看到 media 参数。尝试将"media":file 更改为"content":open('/tmp/myfile.pdf', 'r').read()
  • 这会返回一个 413 错误,r.text 返回一个 HTML 文件,内容为 The request could not be satisfied. Bad request

标签: python python-requests slack-api


【解决方案1】:

通过 http 发送文件比发送其他数据需要更多的工作。您必须设置内容类型并获取文件等所有内容,因此您不能仅将其包含在请求中的 payload 参数中。

您必须将您的文件信息提供给.post 方法的files 参数,以便它可以将所有文件传输信息添加到请求中。

my_file = {
  'file' : ('/tmp/myfile.pdf', open('/tmp/myfile.pdf', 'rb'), 'pdf')
}

payload={
  "filename":"myfile.pdf", 
  "token":token, 
  "channels":['#random'], 
}

r = requests.post("https://slack.com/api/files.upload", params=payload, files=my_file)

【讨论】:

  • 谢谢!这适用于我笔记本电脑上的 python。接下来我想在 nodeMCU 上的 micropython 上对其进行测试。顺便说一句,我上传了一个“txt”文件,它在松弛频道中显示为一个 sn-p。我将要上传大型日志文件,所以在 slack 中截断的大小是否有限制?
  • 好吧,它在 micropython 上不起作用。 post 方法没有“files”参数。如果您有什么想法,请告诉我。
  • 我回复了您的 MicroPython 论坛帖子:forum.micropython.org/viewtopic.php?p=23388#p23388。随时在这里回答。
  • @CalebLewis 是否可以上传文件作为对用户的响应?假设我希望我的聊天机器人返回一个文件作为对我的查询的响应。
  • @Lucif3r - 是的,您可以回复用户。您将频道属性设置为用户(或频道)的 ID。
【解决方案2】:

基于Slack API file.upload 文档 您需要具备的是:

  • 令牌:身份验证令牌承载所需的范围。
  • 频道 ID:上传文件的频道
  • 文件:要上传的文件

这里是示例代码。我在 @slack/web-api 包中使用 WebClient 方法将其上传到 slack 频道。 p>

import { createReadStream } from 'fs';
import { WebClient } from '@slack/web-api';

const token = 'token'
const channelId = 'channelID'
const web = new WebClient(token);

const uploadFileToSlack = async () => {
   await web.files.upload({
     filename: 'fileName',
     file: createReadStream('path/file'),
     channels: channelId,
   });
}

【讨论】:

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