0

我正在尝试通过托管在故障上的节点机器人将文件从 s3 获取到松弛文件,但未能成功。

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

我不完全清楚如何构造表单数据“file”参数以获取字符串,但以下返回“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,我也会接受。

4

1 回答 1

1

即使使用 3k 行日志文件,我也能够通过查询字符串使用 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 以某种方式工作。

于 2018-09-15T09:21:15.453 回答