API getFileSystemManager is not yet implemented in uni-app

API getFileSystemManager is not yet implemented in uni-app

开发环境 版本号 项目创建方式
Windows 1.0.0 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:4.66

手机系统:Android

手机系统版本号:Android 15

手机厂商:小米

手机机型:小米13

页面类型:vue

vue版本:vue2

打包方式:云端

项目创建方式:HBuilderX

示例代码:

/** 初始化录音监听 */
initRecorderListeners() {  
  const recorder = this.recorderManager;  

  // 录音开始(用户按下按钮)  
  recorder.onStart(() => {  
    console.log('录音启动');  
    this.isPressing = true;  
    this.tipText = '正在录音...';  
    this.asrText = '';  
    this.statusText = '';  
    this._startRecordTimer(); // 开始计时(显示已录时长)  
  });  

  // 录音停止(用户抬起按钮)  
  recorder.onStop((res) => {  
    console.log('录音停止,临时路径:', res.tempFilePath);  
    this.isPressing = false;  
    this.tipText = '识别中...';  
    this.isProcessing = true;  
    this.audioPath = res.tempFilePath;  

    // 延迟确保录音文件已生成  
    setTimeout(() => {  
        this.fileToBase64(res.tempFilePath)  
            .then(base64 => {  
                console.log('base64----',base64);  
            })  
            .catch(err => {  
                console.error('处理失败:', err);  
            });  
    }, 500);  
  });  

  // 录音错误处理  
  recorder.onError((err) => {  
    console.error('录音失败:', err);  
    this.resetUI('录音失败,请重试');  
  });  
},  

// 文件转Base64  
fileToBase64(tempFilePath) {  
    console.log('url----',tempFilePath);  
    return new Promise((resolve, reject) => {  
        uni.getFileSystemManager().readFile({  
            filePath: tempFilePath,  
            encoding: 'base64',  
            success: (res) => {  
                resolve(res.data); // 纯Base64字符串  
            },  
            fail: (err) => {  
                reject('读取文件失败: ' + err.errMsg);  
            }  
        });  
    });  
},

操作步骤:

// 文件转Base64  
fileToBase64(tempFilePath) {  
    console.log('url----',tempFilePath);  
    return new Promise((resolve, reject) => {  
        uni.getFileSystemManager().readFile({  
            filePath: tempFilePath,  
            encoding: 'base64',  
            success: (res) => {  
                resolve(res.data); // 纯Base64字符串  
            },  
            fail: (err) => {  
                reject('读取文件失败: ' + err.errMsg);  
            }  
        });  
    });  
},

预期结果:

返回base64

实际结果:

API `getFileSystemManager` is not yet implemented
TypeError: Cannot read property 'readFile' of undefined

更多关于API getFileSystemManager is not yet implemented in uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

更多关于API getFileSystemManager is not yet implemented in uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html


只有鸿蒙支持的情况下,有其他支持安卓/ios的api吗

Android、ios 不支持,仅鸿蒙支持 https://uniapp.dcloud.net.cn/api/file/getFileSystemManager.html
app-plus 可参考 Plus api

请问对应plus中的哪个方法 ,看了一下文档没找到对应的

uni.getFileSystemManager() 在App平台不可用,这是小程序平台的API。在uni-app的App端,应该使用H5+ API来处理文件操作。

建议修改 fileToBase64 方法:

fileToBase64(tempFilePath) {
    return new Promise((resolve, reject) => {
        // App平台使用plus.io API
        plus.io.resolveLocalFileSystemURL(tempFilePath, (entry) => {
            entry.file((file) => {
                const reader = new plus.io.FileReader();
                reader.onload = (e) => {
                    // 移除data URL前缀,只保留纯base64
                    const base64 = e.target.result.split(',')[1];
                    resolve(base64);
                };
                reader.onerror = (e) => {
                    reject('文件读取失败');
                };
                reader.readAsDataURL(file);
            }, reject);
        }, reject);
    });
}

或者使用更简洁的uni API方案:

fileToBase64(tempFilePath) {
    return new Promise((resolve, reject) => {
        // 直接使用uni API转换为base64
        const fs = uni.getFileSystemManager ? uni.getFileSystemManager() : plus.io;
        
        if (uni.getFileSystemManager) {
            // 小程序环境
            uni.getFileSystemManager().readFile({
                filePath: tempFilePath,
                encoding: 'base64',
                success: (res) => resolve(res.data),
                fail: reject
            });
        } else {
            // App环境
            plus.io.resolveLocalFileSystemURL(tempFilePath, (entry) => {
                entry.file((file) => {
                    const reader = new plus.io.FileReader();
                    reader.onload = (e) => resolve(e.target.result.split(',')[1]);
                    reader.onerror = reject;
                    reader.readAsDataURL(file);
                }, reject);
            }, reject);
        }
    });
}
回到顶部