0

试用 transloadit api,当我在 transloadit 网站上使用测试模式时,模板可以工作,但是当我尝试在带有 SDK 的 Node JS 中使用它时,我收到了一个错误:

INVALID_FORM_DATA - https://api2.transloadit.com/assemblies - INVALID_FORM_DATA: The form contained bad data, which cannot be parsed.

相关代码: (_asset.content) 是一个 Buffer 对象

async function getThumbnailUrl(_assetkey: string, _asset: I.FormFile): Promise<string> {
  let tOptions = {
    waitForCompletion: true,
    params: {
      template_id: process.env.THUMB_TRANSLOADIT_TEMPLATE,
    },
  };
  const stream = new Readable({
    read() {
      this.push(_asset.content);
      this.push(null);
    },
  });
  console.log(_asset.content);
  util.transloadit.addStream(_assetkey, stream);

  return new Promise((resolve, reject) => {
    util.transloadit.createAssembly(tOptions, (err, status) => {
      if (err) {
        reject(err);
      }
      console.log(status);
      //return status;
      resolve(status);
    });
  });
}
4

1 回答 1

0

我注意到您还在 Transloadit 论坛上发布了此问题 - 因此,如果其他人遇到此问题,您可以在此处找到有关此主题的更多信息。

这是OP发现可能有用的解决方法:

只是为了结束这个话题,我刚刚测试了我的解决方法(上传到 s3,然后使用 import s3 机器人抓取文件)并让它与 nodejs sdk 一起工作,所以我应该很好地使用它。

我怀疑我得到的错误与 transloadit api 无关,而是节点 js 的表单数据库(https://github.com/form-data/form-data 1 ),这在某种程度上不是以 transloadit api 所期望的方式输入表单数据。

但是由于我找不到该库的替代品,因此我无法真正验证该假设。

Transloadit 核心团队也对此问题做出了回应:

它可能会尝试将他的流设置为 Tus 流,这意味着它们不会作为多部分/表单数据上传。

在任何一种情况下,他的回调的错误似乎都源于 _remoteJson 的错误

这些可能是问题区域

https://github.com/transloadit/node-sdk/blob/master/src/TransloaditClient.js#L146 https://github.com/transloadit/node-sdk/blob/master/src/TransloaditClient.js#L606 https://github.com/transloadit/node-sdk/blob/master/src/TransloaditClient.js#L642

表单数据库也可能是错误的来源

要真正进一步测试这一点,我们将需要尝试使用他正在使用的库,确保它的输出良好,然后调试 node-sdk 以查看逻辑故障在哪里,或者逻辑是否失败发生在 API 方面。

于 2021-03-02T11:08:36.277 回答