vue3 把base64转成file文件的问题--读取文件信息--获取表头--file转base64

9 篇文章 0 订阅

vue3 把base64转成file文件的问题

网上有许多,我就随便复制了两个,但发现了一些问题

1.通过new File()将base64转换成file文件,此方式需考虑浏览器兼容问题。
// 将base64转换为文件
const dataURLtoFile=(dataurl, filename)=> {
  let arr = dataurl.split(",");
  let  mime = arr[0].match(/:(.*?);/)[1];
  let  bstr = window.atob(arr[1]);
  let  n = bstr.length;
  let  u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new File([u8arr], filename, { type: mime });
}

//调用
let file = dataURLtoFile(base64Data, imgName);

2.先将base64转换成blob,再将blob转换成file文件,此方法不存在浏览器不兼容问题。
// 将base64转换为blob
const dataURLtoBlob=(dataurl)=> {
  let arr = dataurl.split(",");
  let  mime = arr[0].match(/:(.*?);/)[1];
  let  bstr = window.atob(arr[1]);
  let  n = bstr.length;
  let  u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], { type: mime });
}
// 将blob转换为file
const blobToFile=(theBlob, fileName)=> {
  theBlob.lastModifiedDate = new Date();
  theBlob.name = fileName;
  return theBlob;
}
// 调用
let blob = dataURLtoBlob(base64Data);
let file = blobToFile(blob, imgName);
}

一,atob报错,报编码问题(Failed to execute 'atob' on 'Window': Th...),后来去网上查了一下

  1,base64包含特殊字符要去掉

    base64.replace(/%0A|\s/g,''))//去掉%和A,我没有试过,还有其它方法自行查找

  2,借助 encodeURIComponent 和 decodeURIComponent 转义非中文字符

    使用decodeURIComponent 转义decodeURIComponent(dataurl)把base64转成ASCII字符序列就可以了

二,文件名的问题

  这里的文件名应该在后面加上一个格式不然后端可能会报错返回

  

 如果不知道怎么上传file文件,可以查看这个:https://www.cnblogs.com/whenwei123/p/16384590.html

获取file信息

function readerData(rawFile: Blob) {
  //读取文件数据
  return new Promise<void>((resolve, reject) => {
    const reader = new FileReader()
    reader.onload = e => {
      if (e) {
        const data = e.target?.result
        const workbook = XLSX.read(data, { type: 'array' })
        const firstSheetName = workbook.SheetNames[0]
        const worksheet = workbook.Sheets[firstSheetName]
        const results = XLSX.utils.sheet_to_json(worksheet)
        const header = getHeaderRow(worksheet)
        // 遍历数据查看是否符合规范
        let typeExcepList = []
        let nullExcepList = []
        let nameExcepList = []
        let set = new Set()
        let mapExcep = new Map()
        results.forEach((item: any, index) => {
          // if(set.keys(item.name))
          // item.forEach((atrr: string) => {
          //   item.atrr
          // })
        })
        // console.log(results, "results");
        console.log(workbook.SheetNames, 'workbook.SheetNames')
        workSheetNames.value = workbook.SheetNames
      }
    }
    resolve()
    reader.readAsArrayBuffer(rawFile)
  })
}




调用
 readerData(blobFile)

 文件转base64

function getBase64(file) {
  // 获取文件转base64
  return new Promise(function (resolve, reject) {
    let reader = new FileReader()
    let Result = ''
    reader.readAsDataURL(file)
    reader.onload = function () {
      Result = reader.result
    }
    reader.onerror = function (error) {
      reject(error)
    }
    reader.onloadend = function () {
      resolve(Result)
    }
  })
}

获取表头

function getHeaderRow(sheet: { [x: string]: any }) {
  //表头
  // const headers = [];
  // const range = XLSX.utils.decode_range(sheet["!ref"]);
  // console.log(range, "range");
  // let C;
  // const R = range.s.r;
  // for (C = range.s.c; C <= range.e.c; ++C) {
  //   const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })];
  //   let hdr = "UNKNOWN " + C;
  //   if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
  //   headers.push(hdr);
  // }
  // return headers;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值