2016-08-25 46 views
2

我目前有一個使用Node Webkit構建的桌面應用程序。當用戶在線時,應用程序將從服務器打開PDF文件。然後我將這些文件保存在本地,以便它們在脫機時可用。Node.js - 在本地下載並保存PDF文件進行脫機 - 文件損壞

我正在使用Node.js文件系統的fs.writeFile(),在本地保存PDF,但試圖通過應用程序打開它時,PDF是空白的。當我嘗試從文件夾直接打開它時,出現以下錯誤。

enter image description here

誰能請指教?

//save PDF file for offline 
function saveFile(pdfvar) { 
    var filename = 'test.pdf'; 
    fs.writeFile(filename, pdfvar); 
} 

//open PDF in new window 
$('#stage').on('click', '#pdflink', function(event){ 
    var pdfvar = (this.getAttribute('data-pdffile')); 
    window.open(pdfvar, "_blank"); 
    if(online===true){ 
     saveFile(pdfvar); 
    } 
}); 
+0

是在新窗口中的PDF渲染得到??並添加錯誤消息。 – vkstack

+0

對不起,我忘了添加錯誤!是的,它打開一個新窗口,但PDF不會加載它的所有空白 – LeeTee

+0

這是因爲'pdfvar'不包含有效的pdf文件 – vkstack

回答

0
  1. 你拿着一個PDF的全部內容在DOM元素屬性this.getAttribute('data-pdffile')?這是它可能被損壞的地方。

  2. 當你調用

    window.open(pdfvar, "_blank"); 
    

內容還沒有準備好要打開這樣的。它應該首先轉換爲base64編碼的url。

window.open('data:application/pdf,' + escape(pdfvar)); 

UPDATE:

實際的問題是,OP試圖利用它在 「pdfvar」

fs.writeFile(filename, pdfvar); 

URL保存文件,但創建的文件只有在含網址本身。所需要的是先下載文件使用HTTP庫:

+0

1.我沒有在DOM中保存全部內容。只是PDF文件的網址。那一定是我出錯的地方。我該如何解決? – LeeTee

+0

2.現在,即使在線時,我也會看到「無法加載PDF文檔」。 – LeeTee

+0

@LeeTee所以你爲什麼要傳遞URL到「saveFile」?然後你會得到fs.writeFile('test.pdf','http://address.com/file.pdf')第二個參數應該是實際數據而不是URL。您的本地保存文件現在是一個文本文件,其中只有一個URL ... – Pawel