成功登录并从信封中获取文档列表后,我尝试使用DocuSign Node SDK从DocuSign检索签名文档,使用以下代码:
envelopesApi.getDocument(accountId, envelopeId, documents[0].documentId, function(err, data, response) {
log.info({data: data.substring(0, 100)}, 'getDocument data');
log.info({response}, 'getDocument response');
fs.writeFile('/home/martin/downloaded.pdf', data, (err) => {
next(err);
});
});
data
变量是一个字符串。它不是base64编码的。第一个日志语句(使用Bunyan日志模块)显示字符串以以下字符开头:
%PDF-1.4
%ûüýþ
4 0 obj
<<
/Parent 3 0 R
/Resources 5 0 R
/MediaBox [0.00000 0.00000 595.00000 842.00
因此我可以看到它不是base64编码的。在字符串中保存pdf文件的内容对我来说似乎很奇怪。我期待一个Buffer
对象。
当我打开(在Chrome中)此代码保存的文件时,它似乎是一个有效的PDF文件(即。e. Chrome不会错误地说文件已损坏),它有正确的页数,但它完全不可读。页面上根本没有可辨认的文字,这表明有什么东西被损坏了。
从SDK中查看EnvelopesApi.js和ApiClient.js文件,我可以看到它正在请求PDF,并且ApiClient中有专门用于处理PDF的代码-这似乎是从可读流中阅读并附加到字符串。
我知道有一种替代方法可以不使用NOde SDK,而直接使用REST API(根据官方REST API Recipe: Getting an Envelope's Document List中的示例),但如果可能的话,我希望使用SDK。
我是否错过了使用这个data
参数应该做的事情?
4条答案
按热度按时间3gtaxfhh1#
请参阅API食谱,在这里下载文档
下面是下载文档的示例代码。
xn1cxnb42#
我们今天遇到了同样的问题,这不是因为Docusign API,而是因为我们使用了Amazon Lambda函数;为了让它工作,我们不得不改变一点我们的无服务器。yml文件并添加一个binaryMediaTypes部分,如下所示:
希望能有所帮助
dbf7pr2w3#
var https = require('follow-redirects')。https; var fs = require('fs ');
mkh04yzy4#
调用envelopesApi时。Docusign Node SDK中的getDocument,返回的数据格式是什么?
eSignature NodeJS SDK的
getDocument
方法默认返回二进制编码的字符串。或者,您可以请求它返回base64编码的字符串。如何将其写入文件?
如果它是一个二进制编码的字符串,则需要使用
Buffer.from(STRING, 'binary')
将其解码为原始二进制缓冲区,然后将结果写入内存。如果它是base64编码的字符串,它是一样的,但您使用'base64'
代替。基于Promise的版本:
你可以这样称呼它: