首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从slackbot向Slack通道发布Base64编码的图像文件

从slackbot向Slack通道发布Base64编码的图像文件
EN

Stack Overflow用户
提问于 2019-04-28 10:45:22
回答 1查看 4K关注 0票数 3

至此,在我的代码中,我已经获得了一个img变量,其中包含一个base64编码的图像。我已经通过记录img并将输出粘贴到代码美化base-64图像编码器中,确认了base-64图像是正确的。

现在,我正在尝试弄清楚如何发布到Slack API。我读过Slack的应用程序方法应用程序接口文档,它说它们接受多部分表单数据或files.upload /x-www- form -urlencoded,但我不知道如何从Base-64转换到node.js中的任何一个。一旦我完成了转换,我也不知道如何使用request.post制作实际的post,因为我不清楚如何编码松弛请求的相关信息。

目前,我正在尝试这样的东西:

代码语言:javascript
运行
复制
        request.post({ url: 'https://slack.com/api/files.upload',
          formData: {
            token: slackToken,
            tile: "Image",
            filename: "image.png",
            filetype: "auto",
            channels: "testing",
            file: img,
          },
        }, function (err, response) {
            // just for debugging
            console.log(JSON.parse(response.body));
        });

获得响应:{ ok: false, error: 'no_file_data' },这是有意义的,因为Slack不接受img的base-64编码

任何帮助都非常感谢!

EN

Stack Overflow用户

回答已采纳

发布于 2019-04-29 08:17:02

首先,如果以:data:image/png;base64,开头,我们需要修剪base64编码

现在,file system可以帮助我们使用writeFileSync转换为文件,它接受文件的base64编码并将文件写入系统。我想找到一种方法来做到这一点,而不会产生将文件写入系统的副作用,但目前还无法做到。

一旦准备就绪,我们就可以使用新创建的文件的路径作为file参数来发出松弛的post请求。工作代码如下:

代码语言:javascript
运行
复制
let imgAsBase64 = img.substring(img.indexOf(',') + 1);

require('fs').writeFileSync('image.png', imgAsBase64, 'base64', (err) => {
  console.log(err);
});

await request.post(
  {
    url: 'https://slack.com/api/files.upload',
    formData: {
      token: slackToken,
      tile: 'Image',
      filename: 'image.png',
      filetype: 'auto',
      channels: msg.channel,
      file: require('fs').createReadStream('./image.png')
    }
  },
  function (err, response) {
    // just for debugging
    console.log(response.body);
  }
);
票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55886581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档