mpflutter / mpflutter

MPFlutter 是一个跨平台 Flutter 开发框架,可用于微信小程序以及 Web 应用开发。
http://mpflutter.com/
Apache License 2.0
1.94k stars 133 forks source link

使用 filesystemmanager 读取文件,数据类型错误 #559

Closed guopp closed 6 months ago

guopp commented 6 months ago

Flutter 版本号:3.16.5 MPFlutter 版本号:2.5.0 操作系统:mac os 14.2.1 IDE:android studio 2023.1.1

使用 FileSystemManager.readFile encoding参数 设置成 'binary',回调里面 result.data 类型是 JSObject. 如果不设置 encoding 返回数据是 String. 按照小程序文档应该返回 ArrayBuffer.

PonyCui commented 6 months ago

已确认是微信的 BUG,encoding 设置 binary 不会返回 ArrayBuffer,不设置任何值则会返回 ArrayBuffer。 以下是更正后的用法

wx.getFileSystemManager().readFile(ReadFileOption()
  ..filePath = filePath
  // ..encoding = "binary" // 不要设置任何值
  ..success = (result) {
    final arrayBuffer = ArrayBuffer($$context$$: result.data);
    print(arrayBuffer.value().toList()); // uint8list
  });
PonyCui commented 6 months ago

如果使用 nightly 的 wechat_api 则可以这样写

      wx.getFileSystemManager().readFile(ReadFileOption()
        ..filePath = filePath
        // ..encoding = "binary" // 不要设置任何值
        ..success = (result) {
          final arrayBuffer = result.data as ArrayBuffer;
          print(arrayBuffer.value().toList()); // uint8list
        });