为了图片安全性,有时候上传图片后后台不会直接返回图片地址,会返回文件流的数据格式,这种格式需要处理下才能展示在页面上
 
// 使用axios请求上传接口
 axios({
    method: 'get',
    url: url, // 请求地址
    responseType: 'blob' // 设置接收格式为blob格式
  }).then(res => {
    // console.log(res)
    if (res && res.data && res.data.size) {
      const dataInfo = res.data
      let reader = new window.FileReader()
      // 使用readAsArrayBuffer读取文件, result属性中将包含一个 ArrayBuffer 对象以表示所读取文件的数据
      reader.readAsArrayBuffer(dataInfo)
      reader.onload = function (e) {
        const result = e.target.result
        const contentType = dataInfo.type
        // 生成blob图片,需要参数(字节数组, 文件类型)
        const blob = new Blob([result], { type: contentType })
        // 使用 Blob 创建一个指向类型化数组的URL, URL.createObjectURL是new Blob文件的方法,可以生成一个普通的url,可以直接使用,比如用在img.src上
        const url = window.URL.createObjectURL(blob)
        console.log(url) // 产生一个类似 blob:d3958f5c-0777-0845-9dcf-2cb28783acaf 这样的URL字符串
      }
    }
  })
 
base64图片转成blob图片,一般base64图片链接比较长,使用链接跳转打开时不太友好,可能会解析错误,可以转成blob图片打开
// 获取base64图片, url图片地址,
  // 如果返回的图片地址不是base64格式,可以通过这个方法转换成base64
  getFile (url) {
    let reader = new FileReader()
    reader.readAsDataURL(url)
    reader.onload = function (e) {
      const base64Data = e.target.result
      // 调用dataURItoBlob转换方法
      console.log(this.dataURItoBlob (base64Data))
    }
  },

  // 将base64图片转化成blob图片, base64Data base64图片地址
  dataURItoBlob (base64Data) {
    // console.log(base64Data, base64Data.length)
    let byteString = base64Data
    if (base64Data.split(',')[0].indexOf('base64') >= 0) {
      byteString = atob(base64Data.split(',')[1]) // base64 解码
    } else {
      byteString = unescape(base64Data.split(',')[1])
    }
    // 获取文件类型
    let mimeString = base64Data.split(',')[0].match(/:(.*?);/)[1] // mime类型

    // ArrayBuffer 对象用来表示通用的、固定长度的原始二进制数据缓冲区
    // let arrayBuffer = new ArrayBuffer(byteString.length) // 创建缓冲数组
    // let uintArr = new Uint8Array(arrayBuffer) // 创建视图

    let uintArr = new Uint8Array(byteString.length) // 创建视图

    for (let i = 0; i < byteString.length; i++) {
      uintArr[i] = byteString.charCodeAt(i)
    }
    // 生成blob图片
    const blob = new Blob([uintArr], {
      type: mimeString
    })
    console.log(uintArr, blob)
    // 使用 Blob 创建一个指向类型化数组的URL, URL.createObjectURL是new Blob文件的方法,可以生成一个普通的url,可以直接使用,比如用在img.src上
    return URL.createObjectURL(blob)
  }

参考文档: https://developer.mozilla.org/zh-CN/docs/Web/API/Blob

    https://blog.csdn.net/qq_34664239/article/details/94595508

01-13 00:55
查看更多