我正在编写一个本机应用程序,我希望它使用包含设备固件更新的zip文件进行部署。
在让用户发送更新之前,我需要使用我的代码打开zip并对其内容进行一些验证。
我发现了许多zip处理NPM软件包,所以我需要做的就是加载文件内容,以便将其提供给其中一个。
5
。我不知道用这个号码可以做什么来获取文件内容,但我很确定这个require()系统是为加载图像而不是二进制数据而设计的。${ReactNativeFs.MainBundlePath}/firmware/fw.zip
); < - MainBundlePath在android上是undefined
。这似乎是一个非常基本的问题,所以我确定我错过了某个地方的文档,但是我要在第三个小时内尝试加载此文件的内容没有运气。
我非常确定我可以手动将zip文件放入相应的android
和ios
资源目录中,但这似乎是一条难以维护的道路。 / p>
答案 0 :(得分:1)
几个月后,我再次遇到了这个问题(显然,我是唯一需要在react-native中打包.zips的人),上面的答案在iOS上无法解决。因此,我将.zip编码为base64,将它们放在.js文件中,然后使用import
从那些.js文件中获取数据。实际上,这似乎是一个有点笨拙但又灵活的长期解决方案,而无需弄乱与平台相关的文件位置。
查看我的新问题的完整答案:React-native packager configuration - How to include .zip file in bundle?
答案 1 :(得分:0)
部分解决方案:
修改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仍然会失败,因为它在您的路径中找到了一个目录,而不是文件。