2016-08-25 47 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