slack files.node中的上载失败,并显示invalid_arg_name

时间:2018-09-09 20:34:34

标签: node.js axios slack slack-api glitch-framework

我正在尝试并无法通过故障主机上的节点bot将文件从s3转换为松弛文件。

我正在克隆的故障项目使用公理来发出Web请求。我正在请求将s3文件读取为字符串,然后将内容放入并将其放入对files.upload的请求中。 Files.upload通过发布获取表单数据。

对于如何构造表单数据的“文件”参数以获取字符串,我还不太清楚,但是以下内容返回“ invalid_arg_name”错误。

  var Readable = require('stream').Readable;
  // ...

  const upload = new FormData();
  upload.append("channels", destinationChannel);
  const s = new Readable();
  s.push("example s3 file content string");
  s.push(null);
  upload.append("file", s); 

  const config = { 
    headers: {'Authorization': "Bearer " + myAccessToken},
    'Content-Type': 'multipart/form-data',
  };

  axios.post(`${apiUrl}/files.upload`, upload, config)
    .then((result) => { 
      console.log('uploaded file'); 
      console.log(result.data);
   }); 

文档还说它采用url编码形式,但我不确定采用什么结构才能处理我想通过发送的10千字节文件这种方法。

如果我们可以修复此方法,那将很好,但是,如果有一种更简便的方法来将公共URL馈送到slack的files.upload中,我也将采用这种方法。

1 个答案:

答案 0 :(得分:0)

即使通过3k行日志文件,也可以通过querystring通过url编码使它工作:

const upload = {
  channels: channel,
  content: "s3 file content",
};

console.log(upload);
const config = { 
  headers: { 'Authorization': "Bearer " + myAccessToken },
  'Content-Type': 'application/x-www-form-urlencoded' 
};
axios.post(`${apiUrl}/files.upload`, qs.stringify(upload), config)
  .then((result) => { 
    console.log('uploaded file'); 
  }).catch((err) => {
    console.log('err on files upload %0', err);
  });

我不确定它会分解成多大,因此我希望以某种方式使formdata工作。