更新记录

1.0.0(2023-06-29)

新版首发


平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 适用版本区间:11 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


KJ-Base64ToFile

超大base64转文件,测过1G文件

使用KJ-FileSlice插件,可以实现超大文件转base64,本插件不包含:https://ext.dcloud.net.cn/plugin?id=3319

实现超大base64转文件

//例子:
    var dic = {
        "saveFilePath": plus.io.convertLocalFileSystemURL("_doc/KJ-Base64ToFile"), //保存文件的绝对路径
        "saveFileName": "1G.zip" //保存的文件名称,后缀名要跟base64数据格式一致
    }
    KJBase64ToFile.initData(dic, (res) => {}); //初始化数据
    var base64 = "xxxx"; //1G的base64
    var arr = this.splitStr(base64); //字符串切片
    for (var i = 0; i < arr.length; i++) {
        var base64Slice = arr[i];
        var dic2 = {
            "base64": base64Slice, //传入的base64长度不能
            "sliceSize": 50 * 1024, //再次分段读取base64的长度,最好不要修改,值过大,会影响性能或闪退
        }
        KJBase64ToFile.addBase64Slice(dic2,(res)=>{ //添加base64切片
            if(i == arr.length-1) {
                KJBase64ToFile.finishData((res) => { //完成添加base64数据 会回调文件绝对路径

                });
            }
        });
    }

使用

<template>
    <view class="content">
        <view>----使用KJ-FileSlice插件,实现超大文件转base64----</view>
        <button type="primary" @click="fileToBase64">超大文件转base64</button>
        <view>----超大base64转文件,本插件的方法----</view>
        <button type="primary" @click="initData">初始化数据</button>
        <button type="primary" @click="addBase64Slice">添加base64切片</button>
        <button type="primary" @click="finishData">完成添加base64数据</button>
    </view>
</template>

<script>
    //例子:
    // var dic = {
    //  "saveFilePath": plus.io.convertLocalFileSystemURL("_doc/KJ-Base64ToFile"), //保存文件的绝对路径
    //  "saveFileName": "1G.zip" //保存的文件名称,后缀名要跟base64数据格式一致
    // }
    // KJBase64ToFile.initData(dic, (res) => {}); //初始化数据
    // var base64 = "xxxx"; //1G的base64
    // var arr = this.splitStr(base64); //字符串切片
    // for (var i = 0; i < arr.length; i++) {
    //  var base64Slice = arr[i];
    //  var dic2 = {
    //      "base64": base64Slice, //传入的base64长度不能
    //      "sliceSize": 50 * 1024, //再次分段读取base64的长度,最好不要修改,值过大,会影响性能或闪退
    //  }
    //  KJBase64ToFile.addBase64Slice(dic2,(res)=>{ //添加base64切片
    //      if(i == arr.length-1) {
    //          KJBase64ToFile.finishData((res) => { //完成添加base64数据 会回调文件绝对路径

    //          });
    //      }
    //  });
    // }
    var KJBase64ToFile = uni.requireNativePlugin("KJ-Base64ToFile");
    export default {
        data() {
            return {}
        },
        onLoad() {},
        methods: {
            fileToBase64() {
                this.initData();
                const KJFileSlice = uni.requireNativePlugin(
                    'KJ-FileSlice'); //该插件是大文件切片,本插件不包含:https://ext.dcloud.net.cn/plugin?id=3319
                var dic = {
                    "pathFileName": plus.io.convertLocalFileSystemURL("static/1G.zip"),
                    "savePath": plus.io.convertLocalFileSystemURL("_doc/KJ-FileSlice"), //保存切片地址,一定要是_doc目录
                    "sliceSize": 10 * 1024 * 1024, //切片大小,单位(B)
                    "sliceSuffixName": "" //保存切片的后缀名 
                }
                KJFileSlice.start(dic, (res) => {
                    console.log("start全部切片完成: " + JSON.stringify(res));
                    if (res.error.length > 0) {
                        console.log("切片错误:" + res.error);
                    }
                    this.test(res.slices)
                }, (res) => {
                    //console.log("start单个切片: " + JSON.stringify(res));
                    if (res.error.length > 0) {
                        console.log("切片错误:" + res.error);
                    }
                    if (res.isFinish) {
                        console.log("切片结束");
                    }
                });
            },
            async test(slices) {
                console.log("总:" + (slices.length - 1));
                for (var i = 0; i < slices.length; i++) {
                    var dic = slices[i];
                    await new Promise((resolve, reject) => { // 添加切片base64的顺序不要变
                        this.sliceFileToBase64(dic.filePath, (res) => {
                            resolve("task" + i);
                            console.log(" 已完成:" + i);
                            if (i == slices.length - 1) {
                                this.finishData();
                            }
                        });
                    });
                }
            },
            sliceFileToBase64(path, callback) {
                //官方plus.io andorid文件转base64,有点慢,请耐心等待,不支持一次性读取大文件
                plus.io.resolveLocalFileSystemURL(path, (entry) => {
                    entry.file((file) => {
                        var reader = new plus.io.FileReader();
                        reader.onloadend = (e) => {
                            var base64 = e.target.result;
                            base64 = base64.split(";")[1];
                            var reg1 = new RegExp("base64,", "g");
                            base64 = base64.replace(reg1, ""); //去掉base64的前缀
                            this.addBase64Slice(base64, (res) => {
                                callback(res);
                            });
                        };
                        reader.readAsDataURL(file);
                    }, (e) => {
                        console.log("error:" + e);
                    })
                })
            },
            initData() {
                var dic = {
                    "saveFilePath": plus.io.convertLocalFileSystemURL("_doc/KJ-Base64ToFile"), //保存文件的绝对路径
                    "saveFileName": "1G.zip" //保存的文件名称,后缀名要跟base64数据格式一致
                }
                KJBase64ToFile.initData(dic, (res) => {
                    console.log("initData:" + JSON.stringify(res));
                });
            },
            addBase64Slice(base64Slice, callback) {
                var dic = {
                    "base64": base64Slice, //传入的base64长度不能
                    "sliceSize": 50 * 1024, //再次分段读取base64的长度,最好不要修改,值过大,会影响性能或闪退
                }
                KJBase64ToFile.addBase64Slice(dic, (res) => { //单次不能添加过大的字符串,会奔溃,分开多次添加
                    console.log("addBase64Slice:" + JSON.stringify(res));
                    callback(res);
                });
            },
            finishData() {
                KJBase64ToFile.finishData((res) => {
                    console.log("finishData:" + JSON.stringify(res));
                    /**
                     * filePathName - 转化完成之后的 文件绝对路径
                     * */
                })
            },
            splitStr(str) { //字符串切片
                if (str.length < 10 * 1024 * 1024) {
                    var rs = [];
                    rs[0] = str;
                    return rs
                } else {
                    let size = 10 * 1024 * 1024
                    let count = Math.ceil(str.length / size)
                    let rs = []
                    for (let i = 0; i <= count; i++) {
                        if (i === 0) {
                            rs.push(str.substring(i, size))
                        } else if (i > 0 && i < count) {
                            rs.push(str.substring((i * size) + 1, (i + 1) * size))
                        } else {
                            rs.push(str.substring((i * size) + 1, str.length - 1))
                        }
                    }
                    return rs;
                }
            }
        }
    }
</script>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问