2013-08-30 46 views
3

我们的网络应用程序提供下载pdf的能力。Firefox下载pdf后pdf下载

当用户点击下载链接时,我们在新标签中打开pdf。

我的firefox使用pdfjs作为pdf查看器,我可以通过它的界面保存pdf。

在Firefox 19中一切正常,但版本24下载文件看起来像损坏(它显示该文件,但无法正确下载)。

我注意到文件的结果大小是2的最近幂,例如,如果我的原始pdf大小是97kb然后通过Firefox的pdfjs下载它的大小变成128kb,并且我的桌面pdf查看器(如acrobat)不能打开它。

我在我们的应用程序的相同版本上测试它。

更新

Demo pdf file - 一切都很好,通过Linux的谷歌浏览器浏览器和Linux的Firefox 21(pdfjs)下载,但与Linux的同样的问题火狐23.0.1

有毛病pdfjs或与我们的服务器?

更新#2

我看着破和不破文件的二进制内容:

 
$ git diff not-broken.dump broken.dump 
diff --git a/not-broken.dump b/broken.dump 
index 3621089..5de337c 100644 
--- a/not-broken.dump 
+++ b/broken.dump 
@@ -336,5 +336,7 @@ 
000014f0 b8 d0 3d 76 85 f8 76 9d e6 50 74 df e7 a7 bd b0 |..=v..v..Pt.....| 
00001500 00 f1 6e 05 63 0a 65 6e 64 73 74 72 65 61 6d 0a |..n.c.endstream.| 
00001510 65 6e 64 6f 62 6a 0a 73 74 61 72 74 78 72 65 66 |endobj.startxref| 
-00001520 0a 35 32 31 33 0a 25 25 45 4f 46 0a    |.5213.%%EOF.| 
-0000152c 
+00001520 0a 35 32 31 33 0a 25 25 45 4f 46 0a 00 00 00 00 |.5213.%%EOF.....| 
+00001530 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 
+* 
+00010000 
+0

你是否在文本/十六进制编辑器中打开坏pdf以查看导致文件大小增加的原因? –

+0

任何机会你有一个生活在线的例子吗?如果没有,您是否至少可以发布初始加载请求的头文件(响应/回复)​​以及稍后的下载请求(Web控制台,Wireshark等)? – nmaier

+0

@MarcB我已经更新了问题 –

回答

3

我们在这里是一个真正的错误。我提交了:https://github.com/mozilla/pdf.js/issues/3634

由于数据传输没有指定内容长度,但使用分块传输编码,因此pdf.js将使用64kb的初始缓冲区,每次该缓冲区溢出时会加倍。但是,一旦传输完成,pdf.js将不会将该缓冲区缩小为实际大小,也不会记住实际大小,因此在下载完整大小缓冲区(您的示例中仍然是最初的64kb)时将被传输。

我不认为有真正的解决方法,因为根本不使用pdf.js(这是用户选择)。