使用NodeJS的Slack API(files.upload)

dan*_*nyk 8 node.js slack-api

EDITED

我正在尝试构建通过Slack提供的files.upload()API,但我很难理解正确的格式.目前,我可以使用API​​上传文本文件,但在我的生活中无法弄清楚如何上传图像.

这是我的问题:我的开发服务器上有一个图像,我们称之为image.png.我想使用files.upload()API将该图像发布到#general Slack通道.下面是我成功生成图像的代码,但目前只是发送文本:

        var myBarChart = new Chart(ctx).Bar(barChartData, barChartOptions);
        var myBarChartDataURL = leaderboardBarChart.toBase64Image();

        canvas.toBuffer(function(err, buf) {
          if (err) throw err;
          fs.writeFile(__dirname + "/leaderboard.png", buf);
        });

        bot.api.files.upload({
          token: process.env.token,
          title: "Image",
          filename: "image.png",
          filetype: "auto",
          //content: "Posted with files.upload API",
          file: fs.createReadStream("path/to/image_file.png"),
          channels: filtered[0].id
        }, function(err, response) {
          if (err) {
            console.log("Error (files.upload) " + err);
          } else {
            console.log("Success (files.upload) " + response);
          };
        });
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我得到以下错误之一:

Slack详细说明的"invalid_array_arg":" 该方法被传递了一个PHP样式的数组参数(例如,名称类似于foo [7]).这些对于Slack API永远无效."

我不完全确定该错误的原因,因为我没有使用PHP,也没有任何我可以识别的类似PHP的东西.

我已经尝试了几种不同的方法来包含文件路径,无论是使用'fs'模块,将其存储在变量中,还是只引用它的绝对路径(甚至是相对路径).我有点失落,只是在寻找一些指导.

我知道这个特殊的API使用multipart/form-data但我没有表单.这个应用程序严格地是一个NodeJS应用程序.没有框架(如Express)与主节点脚本协同工作.

任何和所有的帮助真的很感激.再一次,只是寻找一些关于我错过或做错的见解/指导.

提前致谢!

use*_*559 12

看起来你必须在这里超出Botkit的API,因为Botkit似乎不支持发送multipart/form-data.

尝试一下,request直接使用(已经被Botkit本身使用):

var request = require('request');

...

request.post({
    url: 'https://slack.com/api/files.upload',
    formData: {
        token: bot.config.token,
        title: "Image",
        filename: "image.png",
        filetype: "auto",
        channels: filtered[0].id,
        file: fs.createReadStream('test.png'),
    },
}, function (err, response) {
    console.log(JSON.parse(response.body));
});
Run Code Online (Sandbox Code Playgroud)