【问题标题】:React-Native: How to open locally bundled binary fileReact-Native:如何打开本地捆绑的二进制文件
【发布时间】:2018-05-23 15:22:21
【问题描述】:

我正在编写一个 react-native 应用程序,我希望它使用包含设备固件更新的 zip 文件进行部署。

在让用户发送更新之前,我需要我的代码来打开 zip 并对其内容进行一些验证。

我发现了很多处理 zip 的 NPM 包,所以我需要做的就是加载文件内容,以便将其提供给其中之一。

  • 要求('./firmware/fw.zip');
  • 要求('./firmware/fw.pdf'); 5。我不知道我可以用这个数字做什么来获取文件内容,但我很确定这个 require() 系统是为加载图像而不是二进制数据而设计的。
  • ReactNativeFs.openFile('./firmware/fw.zip');
  • ReactNativeFs.openFile(${ReactNativeFs.MainBundlePath}/firmware/fw.zip); undefined。

这似乎是一个非常基本的问题,所以我确定我在某处遗漏了一段文档,但我正在进入第三个小时尝试加载此文件的内容,但没有运气。

我很确定我可以手动将 zip 文件放入适当的 androidios 资源目录,但这似乎是一条难以维护的道路。

【问题讨论】:

    标签: react-native react-native-fs


    【解决方案1】:

    几个月后我再次遇到了这个问题(我显然是唯一需要在 react-native 中打包 .zips 的人),并且上述答案不适用于 iOS。所以我将 .zip 编码为 base64,将它们放入 .js 文件中,然后使用 import 从这些 .js 文件中获取数据。这实际上似乎是一个有点老套但又很灵活的长期解决方案,而不必弄乱依赖于平台的文件位置。

    查看我的新问题的完整答案:React-native packager configuration - How to include .zip file in bundle?

    【讨论】:

      【解决方案2】:

      部分解决方案:

      修改android/app/build.gradle,添加

      task copyData(type: Copy) {
          from '../../firmware/fw.zip'
          into 'src/main/assets/raw/firmware'
      }
      preBuild.dependsOn copyData
      

      这至少可以确保每次构建时都会复制文件,然后可以通过ReactNativeFs.readFileAssets('raw/firmware/fw.zip', 'base64') 使用。我并不完全兴奋,因为在加载文件时我仍然需要依赖 iOS/android 的代码,但至少现在正在加载。

      提示:注意 gradle 中的语法。 into src/main/assets/myFirmware.zip 将创建一个名为 myFirmware.zip 的目录,并将您的 zip 文件放在它下面。然后 readFileAssets 仍然会失败,因为它在您的路径中查找目录,而不是文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多