jQuery+ajax实现文件上传功能(显示文件上传进度),供大家参考,具体内容如下
具体实现步骤
1、定义UI结构,引入bootstrap的CSS文件和jQuery文件
2、给上传按钮绑定点击事件
3、验证是否选择了文件
4、向FormData中追加文件
5、使用ajax发起上传文件的请求
6、设置文件的路径
7、使用xhr获得文件上传的进度
8、当文件上传完成让进度条显示绿色
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
< style > #loading { width: 20px; height: 20px; } #img { display: block; width: 200px; height: 200px; border-radius: 50%; background-color: #abcdef; opacity: .5; } </ style > < body > <!--multiple可以选择多个文件 --> < input type = "file" multiple name = "" id = "ipt" multiple>< button id = "btn" type = "submit" >上传文件</ button > < img id = "loading" src = "../img/loading.gif" alt = "" style = "display: none;" > <!-- bootstrap中引入条件 --> < div class = "progress" style = "margin-top: 10px;width: 100px;margin-left: 10px;" > < div id = "progress" class = "progress-bar progress-bar-striped active" role = "progressbar" aria-valuenow = "45" aria-valuemin = "0" aria-valuemax = "100" style = "width: 0%;" > 0% </ div > </ div > <!-- 显示上传到服务器的图片 --> < img src = "" alt = "" id = "img" style = "display: none;" > < script src = "../lib/jquery-1.11.0.min.js" ></ script > < script > $(function() { $('#btn').on('click', function() { // 获取文件列表 var file = $('#ipt')[0].files // 判断是否选择了文件 if (file.length <= 0) { return alert('请上传文件') } // 创建formdata var fd = new FormData() // 向formdata中传入数据 // fd.append() // file是一个伪数组 fd.append('avatar', file[0]) // 用ajax传送数据 $.ajax({ type: 'post', url: 'http://www.liulongbin.top:3006/api/upload/avatar', // 数据不需要编码 contentType: false, // 数据对象不需要转换成键值对格式 processData: false, data: fd, beforeSend: function() { $('#loading').show() }, complete: function() { $('#loading').hide() }, success: function(res) { // 判断是否接收成功 if (res.status !== 200) { return alert(reg.msg) } $('#img').attr('src', 'http://www.liulongbin.top:3006' + res['url']).css('display', 'block') }, xhr: function xhr() { var xhr = new XMLHttpRequest() // 获取文件上传的进度 xhr.upload.onprogress = function(e) { // e.lengthComputable表示当前的进度是否是可以计算,返回布尔值 if (e.lengthComputable) { // e.loaded表示下载了多少数据, e.total表示数据总量 var percentComplete = Math.ceil((e.loaded / e.total) * 100) // 让进度条的宽度变化 $('#progress').css('width', percentComplete) // 在进度条中显示百分比 $('#progress').html(percentComplete + 'px') } } // 文件加载完成 xhr.upload.onload = function() { $('#progress').removeClass('progress-bar progress-bar-striped').addClass('progress-bar progress-bar-success') } return xhr } }) }) }) </ script > </ body > |
效果演示(slow3g状态)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_38007986/article/details/111435088