base64 转 文件流

base64 转 文件流,第1张

/**

* @description: base64位图片转码文件

* @param {type}

* @Date: 2019-05-25 09:57:22

*/

base64toFile (dataurl, filename = 'file') {

    let arr = dataurl.split(',')

    let mime = arr[0].match(/:(.*?)/)[1]

    let suffix = mime.split('/')[1]

    let bstr = atob(arr[1])

    let n = bstr.length

    let u8arr = new Uint8Array(n)

    while (n--) {

        u8arr[n] = bstr.charCodeAt(n)

    }

    return new File([u8arr], `${filename}.${suffix}`, {

        type: mime

    })

},

直接调用就行

/**

* 将base64的数据转换成一个Blob对象

* @param {Object} b64Data base64数据

* @param {Object} contentType 数据类型

* @param {Object} sliceSize 分片大小

*/

function b64toBlob(b64Data, contentType, sliceSize) {

    let b = b64Data.toString()

    b64Data = b.split(',')[1]

    var byteCharacters =atob(b64Data)

    var byteArrays = []

    for (let offset =0offset <byteCharacters.lengthoffset += sliceSize) {

        var slice = byteCharacters.slice(offset, offset + sliceSize)

        var byteNumbers =new Array(slice.length)

        for (let i =0i <slice.lengthi++) {

            byteNumbers[i] = slice.charCodeAt(i)

        }

        var byteArray =new Uint8Array(byteNumbers)

        byteArrays.push(byteArray)

    }

    var blob =new Blob(byteArrays, {type: contentType})

    return blob

}

/**

* 将Blob对象转换为file对象

* @param {Object} theBlob blob对象

* @param {Object} fileName 文件名称

*/

function blobToFile(theBlob,fileName) {

    theBlob.lastModifiedDate =new Date()

    theBlob.name = fileName

    return theBlob

}

// 创建一个reader

let reader =new FileReader()

// 将图片转成 base64 格式

reader.readAsDataURL(file)

/**

* 将base64转换为文件

* @param dataurl base64格式数据

* @param filename 文件名

* @param filetype 文件类型

* @returns {File} 二进制流文件

*/

function dataURLtoFile(dataurl,filename,filetype) {

    var arr = dataurl.split(","),

    bstr =atob(arr[1]),

    n = bstr.length,

    u8arr =new Uint8Array(n)

    while (n--) {

        u8arr[n] = bstr.charCodeAt(n)

    }

    return new File([u8arr], filename, {

        type: filetype

    })

}

在过程中,发现报错如下:

failed to execute 'atob' on 'window': the string to be decoded is not correctly encoded.

在Google后,仍然不能解决,~~o(>_<)o ~~

后来在看atob和btoa的demo时发现base64字符串仅仅是后面的乱七八糟字符串好吗,没有前面的名片。

var str = "Hello World!"

var enc = window.btoa(str)

var dec = window.atob(enc)

var res = "Encoded String: " + enc + "

" + "Decoded String: " + dec

The result of res will be:

Encoded String: SGVsbG8gV29ybGQh //看这里!!!!

Decoded String: Hello World!

而图片的base64是这样的:

data:image/gifbase64,/9j/4AAQSkZJRgABAQ........

所以只要后面的就可以了:

b64Data.substring(b64Data.indexOf(',') + 1)

base64转换blob函数

function b64toBlob(b64Data, contentType, sliceSize) {


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6050304.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-13
下一篇 2023-03-13

发表评论

登录后才能评论

评论列表(0条)

保存