Form upload

基础概要

同步上传多文件简单实现

1
2
3
4
<form action='server/upload' method='post' enctype='multipart/form-data'>
<input type='file[]' mutiple />
<input type='submit' value='upload'>
</form>

JS 提供的FormData构造函数及其方法

1
2
3
4
5
6
7
8
var newForm = new FormData();
newForm.append('Keyname','value');

newForm.get('Keyname') // 'value'
newForm.has('Keyname') // true

newForm.delete('Keyname')
newForm.get('Keyname') // null

异步上传

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
<div>
<input type='file[]' mutiple id='file' />
<input type='submit' value='upload'>
</div>
<div class='progress-bar-wrapper' >
<li class='progress-bar'></li>
<span class="error-info"></span>
</div>

<script>
const fileNode = document.querySelector('#file');
const submitNode = document.querySelector('input[type="submit"]');
const progressBarWrapper = document.querySelector('.progress-bar-wrapper'),

fileNode.addEventListener('onchange',function(){
// files属性可得到一组上传文件的信息,包括文件名称,文件大小(字节),文件类型等等
const files = this.files;
var fileName = '',
fileSize = 0,
maxSize = 1048576,
errorInfo = '',
formData = null;

for(let i=0; i<=files.length; i++){
fileName = files[i].name;
fileSize[i].size;
if(!/\.(gif|jpg|jpeg|png)$/.test(fileName)){
errorInfo = '类型错误'
}
if(fileSize>maxSize){
errorInfo = '文件太大'
}

var progressBar = docuemtn.createElement('li');
progressBar.className = 'progress-bar';
progressBarWrapper.appendChild(progressBar);

if(errorInfo !== ''){
progressBarWrapper.innerHTML = `<span class="error-info">${errorInfo}</span>`
}else{
progressBar.innerHTML = '<div class="progress"></div>'

var formData = new FormData();
formData.append('KeyName',files[i]);
// Ajax
var ajax = window.XMLHttpRequest? new window.XMLHttpRequest() : new ActionXObject('Microsoft.XMLHTTP');
ajax.open('post','server/upload');
// 利用闭包保存i
(function(i){
ajax.upload.onprogress = function(e){
var e = e | window.event,
percent = e.loaded / e.total*100+'%',
thisProgressBar = getElementsByClassName('progress-bar')[i];

thisProgressBar.getElementsByClassName('progress')[0].style.width = perceant;
}
})(i)
ajax.send(formData);
}
}
})

</script>
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 Ruoyu Wang
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信