从Docusign Envelopes API下载Blob

时间:2017-08-01 21:32:44

标签: meteor docusignapi

使用Meteor HTTP我可以从docusign获得响应并转换为base64缓冲区。

try {
   const response = HTTP.get(`${baseUrl}/envelopes/${envelopeId}/documents/1`, {
    headers: {
      "Authorization": `bearer ${token}`,
      "Content-Type": "application/json",
    },
  });
   const buffer = new Buffer(response.content).toString('base64');
   return buffer
  } catch(e) {
   console.log(e);
   throw new Meteor.Error(e.reason);
}

然后在客户端上我使用FileSaver.jssaveAs通过此函数从ArrayBuffer创建的blob

function _base64ToArrayBuffer(base64) {
const binary_string =  window.atob(base64);
const len = binary_string.length;
const bytes = new Uint8Array( len );
for (let i = 0; i < len; i++)        {
    bytes[i] = binary_string.charCodeAt(i);
}
return bytes.buffer;
}


// template helper

'click [data-action="download"]'(e, tmpl){
  const doc = this;
  return Meteor.call('downloadPDF', doc, (err, pdf)=>{
    if(err) {
      return notify({
        message: err,
        timeout: 3000,
      })
   }
  const pdfBuffer =  pdf && _base64ToArrayBuffer(pdf);
  console.log(pdfBuffer);
  return  saveAs(new Blob([pdfBuffer], {type: 'application/pdf'}), `docusign_pdf.pdf`);
});
},

PDF正在以正确的尺寸和页面长度下载,但所有页面都是空白的。我应该以不同的方式编码缓冲区吗?还有其他我想念的东西吗?

1 个答案:

答案 0 :(得分:0)

将文档上传到DocuSign时,您可以将原始文档字节作为multipart/form-data request的一部分发送,也可以将文档作为base64编码文件发送到您的document节点中请求正文。

然而,一旦信封完成,DocuSign平台就会将文档转换为PDF(如果它已经不是),并提供该原始文件。因此,您不必对base64进行解码,因此我会尝试删除您的代码部分。