如何使用file.upload和requests将文件上传到松弛状态

时间:2017-04-18 06:14:51

标签: python python-requests slack-api

我一直在搜索,但我找不到我正在寻找的答案。

我尝试使用python请求将文件从/tmp上传到松弛但我不断返回{"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

发布的建议

2 个答案:

答案 0 :(得分:15)

通过http发送文件比发送其他数据需要更多的额外工作。您必须设置内容类型并获取文件以及所有这些内容,因此您无法将其包含在请求中的payload参数中。

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

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)

答案 1 :(得分:0)

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

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

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

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,
   });
}