走了不少弯路,把问题搞复杂了。开始以为文件流就是分片下载,其实不是。

旧版的pdf.js好像不需要设置,自动就是支持分片加载的。

1 服务端golang beego

http.serverfile本身自动支持分片下载的,不用操心。

2 前端

viewer.html页面不需要修改。如果需要,则修改viewer.js和pdf.js等引用文件位置

修改一下web\viewer.js

修改引用位置,如果没问题,则不需要修改 

修改引用位置,如果没问题,则不需要修改

修改build\pdf.js 中分片大小

修改引用位置,如果没有问题,则不需修改 

用一个40M的文件测试一下,效果如下: 

pdf.js分片加载、分段加载golang beego_前端

 相关知识: 

 实现过pdf.js默认一次性加载所有page,加载整个pdf - 53BK报刊网

pdf.js的一些参数:

initialData TypedArray 带有第一部分或全部pdf数据的类型化数组。由扩展使用,因为在切换到范围请求之前已经加载了一些数据。

disableRange 布尔 (可选)禁用PDF文件的范围请求加载。启用后,如果服务器支持部分内容请求,则将以块的形式提取PDF。默认值为“false”。

disableStream 布尔 (可选)禁用PDF文件数据的流式传输。默认情况下,PDF.js会尝试以块的形式加载PDF。默认值为“false”。

disableAutoFetch 布尔 (可选)禁用PDF文件数据的预取。启用范围请求后,即使不需要显示当前页面,PDF.js也会自动继续获取更多数据。默认值为“false”。注意:还必须禁用流式传输,请参阅上文,以便禁用预取功能以使其正常工作。

实现过pdf.js默认一次性加载所有page,加载整个pdf

disableRange设为 true 即可

这样可以pdf.js可以实现pdf文件页码的自动选择(不重复加载pdf文件)

pdfjs优化,实现按需加载,节省流量和内存 - 小黑电脑 

3.3 pdfjs关闭自动获取

  在pdfjs发行包的web/viewer.js文件中,找到配置项disableAutoFetch,可以看到它的默认值是false,意味着会自动获取所有分片。

  将它改为true,意味着关闭自动获取,它仅仅会下载所需要的分片,实现了按需加载。