Slack API 将字符串上传为文件

Slack API upload string as file

我有一个 csv 字符串变量。我想将它作为 .csv 文件而不是文本上传到松弛频道。

async function run() {
    const csvData = 'foo,bar,baz';    
    const url = 'https://slack.com/api/files.upload';
    const res = await axios.post(url, {
        channel: '#csvchannel',
        filename: 'CSVTest.csv',
        content: csvData
    }, { headers: { authorization: `Bearer ${slackToken}` } });

    console.log('Done', res.data);
}

此代码 returns:error: 'no_file_data', 将内容更改为文件给出相同的响应。

我需要做什么才能将 csv 字符串转换为可以上传的文件?我无法使用 fs 写出文件。

我曾尝试使用 fs.createReadStream(csvData),但这需要一个文件,而不是字符串。

Slack API 文档:https://api.slack.com/methods/files.upload

您不需要将 CSV 文件转换成文件,看来您在这里遗漏了几件事:

  • fileType属性,需要CSV.
  • Slack 文件上传 API 支持 multipart/form-dataapplication/x-www-form-urlencoded 内容类型。 你错过了 Content-Type.

查看一个工作示例,了解如何使用 application/x-www-form-urlencoded

发送数据
Send a CSV to Slack                                                                                 View in Fusebit
const csvData = 'foo,bar,baz';
const url = 'https://slack.com/api/files.upload';
const params = new URLSearchParams()
params.append('channels', slackUserId);
params.append('content', csvData);
params.append('title', 'CSVTest');
params.append('filetype', 'csv');

const result = await axios.post(url, params,
  {
    headers:
  {
    authorization: `Bearer ${access_token}`,
    'Content-Type': 'application/x-www-form-urlencoded'
    }
 });

ctx.body = { message: `Successfully sent a CSV file to Slack user ${slackUserId}!` };