js JavaScript 文件相关 input上传 的各种转换操作


 0 、createObjectURL  参数可以是  blob对象 或 file对象

 1、file  ---> base64  或 string

*   文件对象  读取成json

*   文件对象,如图片---->base64

 

2、base64 或 string ---> blob

 

3、  指定urlblob文件对象浏览器下载文件

 

 

 

 

import { getBase64, dataURLtoBlobs, blobToFile } from '@/utils/util.js'

一、文件对象 ---> 读取成json

    geJsonData (file) {
      const __this = this
      var reader = new FileReader()// 新建一个FileReader
      reader.readAsText(file, 'UTF-8')// 读取文件
      reader.onload = function (evt) { // 读取完文件之后会回来这里
        var fileString = evt.target.result // 读取文件内容
        const jsonObj = JSON.parse(fileString)
        __this.actData[file.name] = jsonObj.animations
      }
    },

 

文件对象,如图片---->base64

// util.js

export function getBase64 (img, callback) {
  console.log('getBase64', img)
  const reader = new FileReader()
  reader.addEventListener('load', (e) => {
    callback(reader.result)
  })
  reader.readAsDataURL(img)
}


handleChange (info) {
    // 得到blob格式数据 上传
    getBase64(item.originFileObj, (result) => {
            __this.fileBlobObj[item.name] = dataURLtoBlobs(result)
            __this.postImage(item)
     })

}

 二、

base64 ----->-----> Uint8Array  --> blob

// 将base64 =  dataurl  转换为blob
export function dataURLtoBlobs (dataurl) {
  var arr = dataurl.split(',')
  var mime = arr[0].match(/:(.*?);/)[1]
  var bstr = atob(arr[1])
  var n = bstr.length
  var u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  return new Blob([u8arr], { type: mime })
}

 

 str--->blob

    jsonToAtlasStr (json) {
      let str = '\n'
      str += json.filename + '\n'
      str += 'size: ' + json.png_size.width + ',' + json.png_size.height + '\n'
      str += 'format: ' + json.format + '\n'
      str += 'filter: ' + json.filter.join(',') + '\n'
      str += 'repeat: ' + json.repeat + '\n'

      for (const x in json.blocks) {
        str += json.blocks[x].name + '\n'
        str += '  rotate: ' + (json.blocks[x].rotate ? 'true' : 'false') + '\n'
        str += '  xy: ' + json.blocks[x].xy.x + ', ' + json.blocks[x].xy.y + '\n'
        str += '  size: ' + json.blocks[x].size.width + ', ' + json.blocks[x].size.height + '\n'
        str += '  orig: ' + json.blocks[x].origin_size.width + ', ' + json.blocks[x].origin_size.height + '\n'
        str += '  offset: ' + json.blocks[x].offset.x + ', ' + json.blocks[x].offset.y + '\n'
        str += '  index: ' + json.blocks[x].index + '\n'
      }

      return str
    },

 

 

 

 三、指定urlblob文件对象浏览器下载文件

 // url = blob  或 原始的远程url
function openDownloadDialog (url, saveName) {
if (typeof url === 'object' && url instanceof Blob) { url = URL.createObjectURL(url) } var aLink = document.createElement('a') aLink.href = url aLink.download = saveName || '' var event if (window.MouseEvent) event = new MouseEvent('click') else { event = document.createEvent('MouseEvents') event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) } aLink.dispatchEvent(event) } openDownloadDialog(blobObj, xmlName + '.xlsx')

 

   this.exportRaw('fan.atlas', fileStr)

fakeClick (obj) {
var ev = document.createEvent('MouseEvents') ev.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null) obj.dispatchEvent(ev) }, exportRaw (name, data) { var urlObject = window.URL || window.webkitURL || window var export_blob = new Blob([data]) var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a') save_link.href = urlObject.createObjectURL(export_blob) save_link.download = name this.fakeClick(save_link) },


 

 

dataurl


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM