pdf.js分段加载分段加载
pdf.js默认是支持分段加载,大文件能减少打开时间。
前端代码
var pdfview = _path+'js/pdfjs/web/viewer.html';
function online_pdf(path) {
var index= path.lastIndexOf(".");
//获取后缀
var ext = path.substr(index+1);
if (ext=='pdf') {
//加载文件接口
var url_s = _path+'secure/showpdf?identNo='+ path;
window.open(pdfview+'?file='
+encodeURIComponent(url_s));
}else {
//如果不是pdf
download(path);
}
//window.open(_url_download+ path );
}
后端代码
/**
* 下载文件
* @param identNo 文件唯一识别码(经URLEncoder编码)
* @param res
*/
@RequestMapping(value = "/showpdf", method = RequestMethod.GET)
public void showpdf(String identNo,HttpServletRequest req, HttpServletResponse res) {
try {
service.download(identNo,req, res);
} catch (Exception e) {
// e.printStackTrace();
LogWriter.saveErr(LOG_CODE, e.getMessage());
}
}
/**
* 下载文件
* @param identNo 文件存储路径(经base64加密和URLEncoder编码)
* @param res
*/
@Override
public void download(String identNo,HttpServletRequest request,HttpServletResponse response) {
// 从文件存储服务器下载文件到本地
File file = getFileFromServer(identNo);
BufferedInputStream bis = null;
OutputStream os = null;
BufferedOutputStream bos = null;
InputStream is = null;
try {
is =new FileInputStream(file);
bis = new BufferedInputStream(is);
os = response.getOutputStream();
bos = new BufferedOutputStream(os);
// 下载的字节范围
int startByte,endByte,totalByte;
if (request != null && request.getHeader("range") != null) {
// 断点续传
String[] range = request.getHeader("range").replaceAll("[^0-9\-]", "").split("-");
// 文件总大小
totalByte = is.available();
// 下载起始位置
startByte = Integer.parseInt(range[0]);
// 下载结束位置
if (range.length > 1) {
endByte = Integer.parseInt(range[1]);
} else {
endByte = totalByte - 1;
}
// 返回http状态
response.setStatus(206);
} else {
// 正常下载
// 文件总大小
totalByte = is.available();
// 下载起始位置
startByte = 0;