我一直在搜索,但我找不到我正在寻找的答案。
我尝试使用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
发布的建议答案 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,
});
}