至此,在我的代码中,我已经获得了一个img
变量,其中包含一个base64编码的图像。我已经通过记录img
并将输出粘贴到代码美化base-64图像编码器中,确认了base-64图像是正确的。
现在,我正在尝试弄清楚如何发布到Slack API。我读过Slack的应用程序方法应用程序接口文档,它说它们接受多部分表单数据或files.upload /x-www- form -urlencoded,但我不知道如何从Base-64转换到node.js中的任何一个。一旦我完成了转换,我也不知道如何使用request.post制作实际的post,因为我不清楚如何编码松弛请求的相关信息。
目前,我正在尝试这样的东西:
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编码
任何帮助都非常感谢!
发布于 2019-04-29 08:17:02
首先,如果以:data:image/png;base64,
开头,我们需要修剪base64编码
现在,file system可以帮助我们使用writeFileSync
转换为文件,它接受文件的base64编码并将文件写入系统。我想找到一种方法来做到这一点,而不会产生将文件写入系统的副作用,但目前还无法做到。
一旦准备就绪,我们就可以使用新创建的文件的路径作为file
参数来发出松弛的post请求。工作代码如下:
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);
}
);
https://stackoverflow.com/questions/55886581
复制相似问题