Cloudconvert - 使用请求承诺通过 API 上传时出现无效签名错误

Cloudconvert - Invalid signature error when using request-promise to upload via API

我正在尝试使用 nodeJS 和请求承诺通过 cloudconvert API 上传 pdf。获取上传 URL 和参数的请求成功,但是当我尝试传递数据时,我收到 401 - "FormPost: Invalid Signature" 错误,即使我使用的是从第一个请求返回的签名。

...
pdfToPng: function(pdfBuffer, apiKey) {
    return new Promise(async (resolve, reject) => {
      const cloudConvert = new CloudConvert(apiKey);
      let response = JSON.parse(
        await request.post('https://api.cloudconvert.com/v2/import/upload', {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${apiKey}`,
          'Content-type': 'application/json',
        },
      }));
      let fileUrl = response.data.result.form.url;
      let params = response.data.result.form.parameters;
      let fileUpload = await request.post({
        url: fileUrl,
        formData: {
          "expires": params.expires,
          "max_file_count": params.max_file_count,
          "max_file_size": params.max_file_size,
          "signature": params.signature,
          "file": {
            value: pdfBuffer.toString('base64'),
            options: {
              filename: 'invoice.pdf',
              contentType: 'application/pdf'
            }
          }
        }
      }).catch((err) => {
        console.log('ERROR UPLOADING FILE: ', err); //<-- 401 Error here
        reject(err);
      })
      console.log('FILE UPLOAD RESPONSE: ', fileUpload);
...

您需要将 response.data.result.form.parameters 的所有参数传递给 formData,而不仅仅是命名参数:

  let fileUpload = await request.post({
    url: fileUrl,
    formData: {
      ...response.data.result.form.parameters,
      "file": {
        value: pdfBuffer.toString('base64'),
        options: {
          filename: 'invoice.pdf',
          contentType: 'application/pdf'
        }
      }
    }