/**
 * desc: base64对象转blob文件对象
 * @param urlData  ：数据的base64对象
 * @param type  ：类型 png,pdf,doc,mp3等;
 * @returns {Blob}：Blob文件对象
 */
function base64ToBlob(urlData, type) {
  let arr = urlData.split(',')
  let array = arr[0].match(/:(.*?);/)
  let mime = (array && array.length > 1 ? array[1] : type) || type
  // 去掉url的头，并转化为byte
  let bytes = window.atob(arr[1])
  // 处理异常,将ascii码小于0的转换为大于0
  let ab = new ArrayBuffer(bytes.length)
  // 生成视图（直接针对内存）：8位无符号整数，长度1个字节
  let ia = new Uint8Array(ab)
  for (let i = 0; i < bytes.length; i++) {
    ia[i] = bytes.charCodeAt(i)
  }
  return new Blob([ab], {
    type: mime
  })
}

/**
 * 返回图片本地file
 * @param {*} urlData 
 * @returns 
 */
export  function creatImageFile(urlData,fileName){
  //获得blob对象
  let blob = base64ToBlob(urlData, "image") 
  //获取类型
  let type=urlData.split("data:").join('').split(";base64")[0];
  //创建文件对象
  return transToFile(blob,fileName,type);
}


async function transToFile(blob, fileName, fileType) {
  return new window.File([blob], fileName, {type: fileType})
}

/**
 * desc: 下载导出文件
 * @param blob  ：返回数据的blob对象或链接
 * @param fileName  ：下载后文件名标记
 * @param fileType  ：文件类 word(docx) excel(xlsx) ppt等
 */
function downloadExportFile(blob, fileName, fileType) {
  let downloadElement = document.createElement('a')
  let href = blob

  if (typeof blob == 'string') {
    downloadElement.target = '_blank'
  } else {
    href = window.URL.createObjectURL(blob) //创建下载的链接
  }
  console.log(href, 'href')
  downloadElement.href = href
  downloadElement.download = fileName + '.' + fileType //下载后文件名
  document.body.appendChild(downloadElement)
  downloadElement.click() //触发点击下载
  document.body.removeChild(downloadElement) //下载完成移除元素
  if (typeof blob != 'string') {
    window.URL.revokeObjectURL(href) //释放掉blob对象
  }
}

/**
 * desc: base64转文件并下载
 * @param base64 {String} : base64数据
 * @param fileType {String} : 要导出的文件类型png,pdf,doc,mp3等
 * @param fileName {String} : 文件名
 */
export function downloadFile(base64, fileName, fileType) {
  let blob = base64ToBlob(base64, fileType) // 转成blob对象
  downloadExportFile(blob, fileName, fileType) // 下载文件
}
