var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(){
//console.log(reader.result); //获取到base64格式文件
let token = window.sessionStorage.getItem('token');
if(token == null){
message.info("账号已过期,请重新登录");
window.sessionStorage.clear();
router.push("/login");
return;
}
let values = {
"token":token,
"firmwareIndex":0,
"firmwareContent":reader.result
}
let arr = []
let num = parseInt((file.size/1024/1024)+1);//切片数量,(1M一个,即10M的文件分成10个)
let totalFile = reader.result;//总文件内容
console.log(totalFile)
//去掉开头的 data:application/octet-stream;base64,
let total2 = totalFile.split("base64,")
let total = total2[1]
console.log("base64内容:"+total)
//下面两行为测试数据
// let num = 8;//切片数量
// let totalFile = "12345678912345678912345678912345";//总文件内容
let eachFileNum = parseInt(parseInt(total.length/num)/4+1)*4;//每个切片长度
console.log("文件总长度:"+totalFile.length+";去掉开头的文件长度:"+total.length+";每个切片长度::::"+eachFileNum+";切片数量:"+num)
//将文件平均分成多个切片
for(let i=0;i<num;i++){
let each;
if(i===num-1 && i!==0){
each = total.substring(eachFileNum*(num-1));//最后一个切片
}
else{
each = total.substring(eachFileNum*i,eachFileNum*(i+1));
}
arr.push(each)
console.log("第"+i+"个切片长度:"+each.length);
}
console.log("切片数组:====="+arr.length)
dispatch({ type: 'deviceMaintain/uploadFile', payload: { num,arr } });
let isUploading = true;
dispatch({ type: 'deviceMaintain/changeUploading', payload: { isUploading } });
};
注意:在不同浏览器,readAsDataURL将文件解析成base64的内容前缀可能不同!!
例如同上传一个文件,在谷歌浏览器base64内容为:
data:application/octet-stream;base64,SFZCT1guY2ZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2MDAAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwMDMyADEzNzAxNzUzMTcwADAxMDU0MgAgMAAAAAAAAAAAAAAAAAAAA
在IE浏览器却为:
data:;base64,SFZCT1guY2ZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2MDAAMDAwMTc1MAAwMDAxNzUwADAwMDAwMDAwMDMyADEzNzAxNzUzMTcwADAxMDU0MgAgMAAAAAAAAAAAAAAAAAAAA