我正在使用node.js尝试通过slackAPI的上载文件方法上载csv文件。该方法是发布。我不确定如何做到这一点,因为如果我使用content参数而不是文件,则会出现错误:
{ ok: false, error: 'invalid_array_arg' }
如果我使用文件参数,仍然会收到错误:
{ ok: false, error: 'invalid_array_arg' }
此代码中有多个故障点,我尝试对每个故障点进行测试,但是我确定这里缺少一些信息。这是我创建的uploadFile方法:
function uploadFile(file){
console.log(botToken);
axios.post('https://slack.com/api/files.upload', qs.stringify({token: botToken, file: file, channels: 'testing'}))
.then(function (response) {
var serverMessage = response.data;
console.log(serverMessage);
console.log("inside file upload function");
})
}
这是我调用方法的方式:
var file = fs.createReadStream(__dirname + '/' + csvFilePath); // <--make sure this path is correct
console.log(__dirname + '/' + csvFilePath);
uploadFile(file);
最后是输出:
启动了! C:\ Users \ i502153 \ WebstormProjects \ slackAPIProject / accessLogs / CSV / 1548430592860output.csv * {ok:错误,错误:'invalid_array_arg'} 内部文件上传功能
我做错了什么以及如何纠正这个问题?
链接: https://api.slack.com/methods/files.upload https://www.npmjs.com/package/axios
答案 0 :(得分:1)
您的解决方案将不起作用,因为您正试图获取一个流对象(file
)并将其字符串化为查询字符串,而这只会插入无意义的字符串“ [对象]”进入查询。它实际上不会将数据流传输到Slack。
不幸的是,Axios不能像在浏览器中那样在节点中正常工作,并且他们的文档可能有些混乱。
我建议采用这种方法(未经测试):
const axios = require('axios');
const FormData = require('form-data');
function uploadFile(file) {
const form = new FormData();
form.append('token', botToken);
form.append('channels, 'testing');
form.append('file', file, 'optionalfilenamehere');
return axios.post('https://slack.com/api/files.upload', form, {
headers: form.getHeaders()
}).then(function (response) {
var serverMessage = response.data;
console.log(serverMessage);
console.log('inside file upload function');
});
}
我根据票证https://github.com/axios/axios/issues/1006#issuecomment-320165427中的建议改编了这段代码,如果遇到问题,这里可能还会有其他有用的评论。祝你好运!
编辑:对于以后阅读此书的人们,对于使用request
而非axios
的类似方法,请参见相关问题Slack API (files.upload) using NodeJS。