1. 先建立一个最简单的 input
1
2
3
<input type="file" name="file" @change="handleFilerChange">
//监听change事件,拿到file
const [file] =e.target.files
  1. 上传文件请求,同时实现进度条
1
2
3
4
5
6
7
8
9
10
//新建一个formData
const form = new formData()
form.append('name','file')
form.append('file',this.file)
const ret = await this.$http.post('/uploadfile',form,{
//请求进度计算
onUploadProgress:progress=>{
this.uploadProgress = Number(((progress.load/progress.total)*100).toFixed(2))
}
})
  1. 文件检验 e
  • 将文件流变为 16 进制的 ACSII 码,同一类文件有固定特征(头,尾为固定的几位数)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
blobToString(blob){
return new Promise (resolve=>{
//FileReader是异步执行的,onload是其成功的回调函数
const reader = new FileReader()
reader.onload= function(){
// console.log(reader.result.split('').map(v=v.charCodeAt()))
const ret = reader.result.split('')
.map(v=>v.charCodeAt())
.map(v=>v.toString(16).toUpperCase())
.join('')
resolve (ret)
}
reader.readAsBinaryString(blob)
})
},
  1. 就算 MD5