js--将文件转成Base64编码字符串

        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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值