更新记录

1.0.0(2022-08-03)

插件上新


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 11.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


luanqing-file-manage

温馨提示:可下载demo示例工程或加作者咨询

QQ: 835588741/1660584265 微信: 15921627041

注意

1/ 目前暂不支持IOS平台 后续再行开发IOS端
2/ Android Q (Android 10、11、12)以上API删除文件时必须点击允许系统弹出的授与修改权限提示框

API 简要说明

名称 说明 参数 默认值 是否必须
getFiles 获取文件列表 object:{fileType},值:image/video/audio/document/zip
deleteFile 删除文件 onject:{fileType,filePath,fileId} 文件类型、路径、id
函数具体用法以及参数介绍

####### 获取文件列表 实例

fileManage.getFiles({fileType:'image'}, (res=>{
    console.error("接口返回的数据:",res.files);
    $that.listData = res.fileList;
}), (fail=>{
    console.error("获取文件列表失败:",fail.code, fail.message);
}));

成功回调的返回值格式:
{
    fileList:[
        {
            path:'xxxxx', // 文件路径  删除时需要(为适配低版本,需传路径)
            size: 233332, // 文件的大小单位 bit
            name:'xxx', // 文件名字
            id: 12222  // 文件id  删除时需要
        }
    ],
    fileType:'audio', // 文件列表类型 image、video、audio、document、zip(Android高版本不允许获取非媒体document、zip)
    fileNum:95  // 文件列表长度
}

####### 删除文件 实例

fileManage.deleteFile({fileType:'video',fileId:'xxx', filePath:'xxxxx'},(res=>{
    console.error("删除成功:",res.code, res.message);  // 成功时code固定200
}), (res=>{
    console.error("删除失败:",res.code, res.message); // code > 200
}));

为了让一些不太熟悉的童鞋可以更清晰完整的看完代码,这里附加实例代码(高阶童鞋可忽略):

<template>
    <view>
        <uni-segmented-control 
            :values="['图片','视频','音频','文档','zip']" 
            styleType="button" 
            @clickItem="onClickItem"
            class="segmented-style">
        </uni-segmented-control>

        <view class="list-style" v-if="listData && listData.length > 0">
            <view v-for="(item, index) in listData" v-bind:key="index" class="list-item-style" @longpress="longPressEvent(item)">
                <text class="list-item-text">{{getUnitValue(item.size)}}</text>
                <image :src="item.path" class="list-item-media-style" v-if="mode === 'image'"></image>
                <view v-else-if="mode === 'video'" style="background-color: bisque;display: flex;align-items: center;justify-content: center;" class="list-item-media-style">
                    <image src="../../static/icon_play.png" style="width: 50rpx; height: 50rpx;"></image>
                </view>

                <view v-else-if="mode === 'audio'" style="background-color: indianred;display: flex;align-items: center;justify-content: center;" class="list-item-media-style">
                    <image src="../../static/icon_audio.png" style="width: 50rpx; height: 50rpx;"></image>
                </view>
            </view>
        </view>
        <view v-else style="color: #999999;min-height: calc(60vh);display: flex;align-items: center;justify-content: center;">
            设备中没有发现该类型文件
        </view>
    </view>
</template>

<script>
    var fileManage = uni.requireNativePlugin("luanqing-file-manage");

    export default {
        data() {
            return {
                mode:'image', // image|图片 video|视频  audio|音频  document|文档 doc/xlsx/dpf   zip/压缩文件  document和zip可能在高版本API无法获取了,因为安卓版本特性限制
                listData:[],
            }
        },
        onShow() {
            this.loadFiles();
        },
        methods: {
            longPressEvent(data){
                const $that = this;
                uni.showModal({
                    title:'是否确定删除?',
                    cancelText:'取消',
                    confirmText:'删除',
                    complete(res) {
                        if(res.confirm){
                            console.error("长按删除:",data);
                            fileManage.deleteFile({fileType:$that.mode,fileId:data.id, filePath:data.path},(res=>{
                                console.error("删除成功:",res);
                                $that.loadFiles();
                            }), (res=>{
                                console.error("删除失败:",res);
                            }));
                        }
                    }
                })
            },
            loadFiles(){
                const $that = this;
                console.error("是否是空:",fileManage === undefined || fileManage === null);
                fileManage.getFiles({fileType:this.mode}, (res=>{
                    console.error("接口返回的数据:",res.files);
                    $that.listData = res.fileList;
                }), (fail=>{
                    console.error("获取文件列表失败:",fail);
                }));
            },
            onClickItem(e){
                this.mode = this.getFileType(e.currentIndex);
                this.loadFiles();
            },
            // 获取文件类型
            getFileType(typeId){
                switch(typeId){
                    case 0: return "image";
                    case 1: return "video";
                    case 2: return "audio";
                    case 3: return "document";
                    case 4: return "zip";
                    default: return "image";
                }
            },
            // 计算文件大小值和单位
            getUnitValue(value){
                if(value > 1000000)
                    return (value / 1000000).toFixed(1) + 'MB';
                else if(value > 1000)
                    return Math.floor(value / 1000).toFixed(1) + 'KB';
                else if(value < 1000)       
                    return Math.floor(value / 1000).toFixed(1) + 'KB';
                // return value > 1000 ? 
            }
        }
    }
</script>

<style>
    .segmented-style{
        margin-left: 20rpx;
        margin-right: 20rpx;
        margin-top: 25rpx;
    }
    .list-style{
        display: flex;
        flex-direction: row;
        flex-wrap: wrap;
    }
    .list-item-style{
        width: 115rpx;
        height: 115rpx;
        margin: 5rpx;
        position: relative;
        background-color: #ffffff;
    }
    .list-item-media-style{
        width: 115rpx;
        height: 115rpx;
        position: absolute;
        top: 0rpx;
        bottom: 0rpx;
        left: 0rpx;
        right: 0rpx;
        z-index: 10;
    }
    .list-item-text{
        z-index: 100;
        position: absolute;
        bottom: 0rpx;
        right: 0rpx;
        color: #333333;
        padding: 0rpx 10rpx;
        font-size: 20rpx;
        background-color: #F2F2F2;
    }
</style>

上海栾青网络科技有限公司

15921627041 (同微信)

隐私、权限声明

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

android.permission.WRITE_EXTERNAL_STORAGE android.permission.READ_EXTERNAL_STORAGE

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

插件不采集任何数据

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

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