0
使用Meteor HTTP我可以從docusign獲得響應並將其轉換爲base64緩衝區。從Docusign信封下載Blob API
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);
}
然後,我通過這個功能
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與正確的尺寸和頁面長度下載使用FileSaver.js到saveAs
從ArrayBuffer創建一個blob的客戶端,但所有的網頁上是空白的。我應該以不同的方式編碼緩衝區嗎?還有什麼我失蹤?
好的,有趣的,謝謝。但是,如果我只是從api返回'result.content'並直接創建一個blob,它仍會下載正確大小的PDF和正確的頁數,但所有頁面都是空白的。 編輯:爲了什麼是值得的,我可以用郵差來打API,它下載文件就好了。 – xhaque
@xhaque - 因爲它與郵遞員一起工作,聽起來像是你的流星設置的問題...... –
@xhaque:當你編碼到base64時,嘗試在下一行解碼相同的內容,看看你是否看到相同的內容與否。看來base64的編碼/解碼正在破壞pdf。在'const buffer = new Buffer(response.content).toString('base64');'之後解碼 –