私はたくさん検索してきましたが、探しているものに対する答えが見つかりませんでした。
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)
主に投稿されたアドバイスに従おうとしています ここ
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)
Slack API file.upload ドキュメントに基づく必要なものは次のとおりです。
- トークン:必要なスコープを持つ認証トークン。
- チャネルID:ファイルをアップロードするチャネル
- ファイル:アップロードするファイル
これがサンプルコードです。 WebClientメソッドを@ slack/web-apiパッケージをslackチャネルにアップロードします。
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,
});
}