【问题标题】:Slack API upload string as fileSlack API 将字符串上传为文件
【发布时间】:2022-02-08 23:25:09
【问题描述】:

我有一个 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);
}

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

如何将 csv 字符串转换为可以上传的文件?我不能用 fs 写出文件。

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

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

【问题讨论】:

    标签: javascript node.js post axios slack


    【解决方案1】:

    您不需要将 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}!` };
    
    

    【讨论】:

    • 感谢您的帮助。这行得通。我还需要将应用程序添加到我尝试将文件上传到的频道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    相关资源
    最近更新 更多