js---将base64的数据转换为文件

方案一、先将base64格式的数据转换成一个Blob对象,再将Blob对象转换为file对象

/**

* 将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 =0; offset < byteCharacters.length; offset += sliceSize) {

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

        var byteNumbers =new Array(slice.length);

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

            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;

}

方案二、直接将base64格式数据转换为文件

// 创建一个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

    });

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容