2017-08-01 97 views
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.jssaveAs從ArrayBuffer創建一個blob的客戶端,但所有的網頁上是空白的。我應該以不同的方式編碼緩衝區嗎?還有什麼我失蹤?

回答

0

在上傳文件到您的DocuSign可以發送原始文件的字節爲multipart/form-data request的一部分,或者您可以發送文件,如你要求的身體document節點base64編碼文件。

但是一旦信封完成,DocuSign平臺會將文檔轉換爲PDF(如果它不是已經存在的)並提供該原始文件。因此,你不應該base64解碼文件,所以我會嘗試刪除你的代碼的一部分。

+0

好的,有趣的,謝謝。但是,如果我只是從api返回'result.content'並直接創建一個blob,它仍會下載正確大小的PDF和正確的頁數,但所有頁面都是空白的。 編輯:爲了什麼是值得的,我可以用郵差來打API,它下載文件就好了。 – xhaque

+1

@xhaque - 因爲它與郵遞員一起工作,聽起來像是你的流星設置的問題...... –

+0

@xhaque:當你編碼到base64時,嘗試在下一行解碼相同的內容,看看你是否看到相同的內容與否。看來base64的編碼/解碼正在破壞pdf。在'const buffer = new Buffer(response.content).toString('base64');'之後解碼 –

相關問題