使用jquery给网站添加下载进度显示

因为知微网站的流出带宽特别低,为了给用户更好的体验,在线打开pdf的时候,考虑采用两条途径:一条是按页提供给用户进行阅读,减少带宽占用,因为不是所有的用户都全部页面都看一遍;另一条是给出pdf的下载进度提示,用户能够有交互式的感知体验。第一条限于技术原因,实现起来较为复杂;因此先实现了第二条途径。

从网站的技术角度来看,前端页面对服务器发出ajax请求,服务器收到请求后读取对应pdf,通过Nodejs的Stream方式回传给页面。下面的代码显示了通过jquery发送ajax请求,并在控制台显示进度信息

 1 $.ajax({
 2             url: ‘/api/version‘,
 3             type: ‘post‘,
 4             dataType: ‘json‘,
 5             data: { paperid: paperid, version: filename },
 6             statusCode: {
 7                 200: function (json) {},
 8             },
 9             xhr: function(){
10                 var xhr = new window.XMLHttpRequest();
11                 //download progress
12                 xhr.addEventListener("progress", function (evt) {
13                     if (evt.lengthComputable) {
14                         var percentComplete = evt.loaded / evt.total;
15                         console.info("progress: "+Math.round(percentComplete * 100)+"%");
16                     }
17                 }, false);
18                 return xhr;
19             }
20         });

如果evt.lengthComputable为false,一般是由于服务器没有设置数据包的长度导致的。因此,在服务器端回传的代码片段如下:

 1         const s = new Readable();
 2         s.push(blob);
 3         s.push(null);
 4         res.set({
 5             ‘Accept-Ranges‘:‘bytes‘,
 6             ‘Content-Type‘: ‘application/octet-stream‘,
 7             ‘Content-Disposition‘: ‘attachment; filename=‘ + paperid + ‘.pdf‘,
 8             ‘Content-Length‘: blob.length
 9         });
10         s.pipe(res);
Content-Length即是下载文件的总长度

参考资料:

http://api.jquery.com/jQuery.ajax/

https://stackoverflow.com/questions/22502943/jquery-ajax-progress-via-xhr

原文地址:https://www.cnblogs.com/webbery/p/10486750.html

时间: 2024-10-17 14:36:50

使用jquery给网站添加下载进度显示的相关文章

关于AFNetWorking 下载进度 显示"The operation couldn’t be completed. Is a directory" 的bug处理

NSURL *URL = [NSURL URLWithString:@"http://cdn.sencha.com/ext/gpl/ext-4.2.1-gpl.zip"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; //下载请求 AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]

request下载进度显示,多线程爬取麦子学院视频

#encoding:utf8import _threadimport timeimport requestsfrom lxml import etreeimport reimport sysfrom contextlib import closing# 为线程定义一个函数class ProgressBar(object): def __init__(self, title, count=0.0, run_status=None, fin_status=None, total=100.0, uni

Android中AsyncTask进行后台下载文件并在下拉菜单显示下载进度

在开发过程中,总会需要从网络上下载文件,有时候还需要将下载进度显示在下拉菜单中. 现在写了一个Demo,封装了AsyncTask下载文件和进度显示的代码,以后在做项目的时候能够直接进行使用. 效果图: 主界面只有一个按钮,比较简单: / layout / activity_main.xml : <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="h

Retrofit2文件上传下载及其进度显示

序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multipart @POST("fileService") Call<User> uploadFile(@Part MultipartBody.Part file); 构造请求体上传 1 2 3 4 5 File file = new File(filePath); RequestBod

Android中如何下载文件并显示下载进度

原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Service和使用DownloadManager. 一.使用AsyncTask并在进度对话框中显示下载进度 这种方式的优势是你可以在后台执行下载任务的同时,也可以更新UI(这里我们用progress bar来更新下载进度) 下面的代码是使用的例子 1 // declare the dialog as a

libcurl开源库在Win7 + VS2012环境下编译、配置详解 以及下载文件并显示下载进度 demo(转载)

转载:http://blog.csdn.net/fengshuiyue/article/details/39530093(基本教程) 转载:https://my.oschina.net/u/1420791/blog/198247 转载:http://www.cnblogs.com/flylong0204/p/4723155.html 转载:http://www.tuicool.com/articles/VNRzEbq 转载:http://blog.csdn.net/hei_ya/article/

VC下载文件显示进度条

VC下载文件显示进度条 逗比汪星人2009-09-18上传 by Koma http://blog.csd.net/wangningyu http://download.csdn.net/detail/wangningyu/1674247

Python urllib的urlretrieve()函数解析 (显示下载进度)

1 #!/usr/bin/python 2 #encoding:utf-8 3 import urllib 4 import os 5 def Schedule(a,b,c): 6 ''''' 7 a:已经下载的数据块 8 b:数据块的大小 9 c:远程文件的大小 10 ''' 11 per = 100.0 * a * b / c 12 if per > 100 : 13 per = 100 14 print '%.2f%%' % per 15 url = 'http://www.python.

jquery开发网站后台模板源代码下载

原文:jquery开发网站后台模板源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463634934784.htm 这效果怎么样????