1

我正在尝试使用 nodeJS 和 request-promise 通过 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);
...
4

1 回答 1

0

您需要传递 to 的所有参数response.data.result.form.parametersformData而不仅仅是命名的参数:

  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'
        }
      }
    }
于 2020-10-09T09:07:54.333 回答