web-dev-qa-db-ja.com

file.uploadとrequestsを使用してファイルをSlackにアップロードする方法

私はたくさん検索してきましたが、探しているものに対する答えが見つかりませんでした。

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)

主に投稿されたアドバイスに従おうとしています ここ

5
Harsha Goli

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)
20
Caleb Lewis

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