react-native-fs
将仅从设备存储访问文件。所以这个问题造成了一个困惑。这些文件在构建时捆绑在一起,所以我们如何在开发与生产中访问它们?
我的项目结构
âââ android
âââ app
â  âââ assets
â  âââ images
âââ ios
我把我的图像存储在里面
./app/assets/images/
发展
在什么时候
发展
或
调试
这些文件通过Metro Bundler提供给设备,因此它们实际上不存储在设备上。因此,从设备存储中访问它们是不可能的。你得提供一些
嘲弄的
用于开发时的功能。可以使用
__DEV__
允许根据环境运行不同的函数
https://facebook.github.io/react-native/docs/javascript-environment
if (__DEV__) {
// do something in development
} else {
// do something in production
}
生产
从一些研究来看,似乎可以访问生产中的文件。
网间网操作系统
我发现文件位于一个名为
assets
那是在
MainBundlePath
.
所以如果你想访问我本地目录中的以下文件
./app/assets/images/image.png
您需要以下文件路径:
RNFS.MainBundlePath + /assets/app/assets/images/image.png
在设备上访问它。
您可以通过查看
Packaging.log
是用你的
ipa
.
安卓
Android没有名为
主束路径
那只是在
iOS
. 我花了一些时间研究和查看设备上的不同文件夹,但无法访问捆绑的图像。它们似乎无法以我们希望使用的方式访问
反应本地FS
.
可能的解决方案
rn-fetch-blob
RN取出块
两者都有功能
ios
和
Android
从资产目录中读取
访问的文件
网间网操作系统
您可以这样做:
RNFetchBlob.fs.stat(fs.dirs.MainBundleDir + '/whatever/files/you/added.mp3').then( stats => {...});
为了
安卓
您可以这样做:
RNFetchBlob.fs.stat(fs.asset('/whatever/files/you/added.mp3').then( stats => {...});
它确实对Gradle压缩的资产发出了警告。
Gradle将默认压缩捆绑资产。要使用此模块与资产文件交互,必须禁用压缩。请看
How to access files from assets
更多细节。
这可以解释为什么当我使用
反应本地FS
您可以阅读更多关于使用
RN取出块
它的文件系统在这里
https://github.com/joltup/rn-fetch-blob#user-content-file-system
将文件存储在本机项目中
而不是依靠bundler为您打包图像并将其放到设备上。您可以将它们的副本存储在
网间网操作系统
和
安卓
项目。这样做的好处是,这些图像在开发中是可用的,但是您将多次存储这些图像,这可能会导致更大的应用程序大小。
将图像存储为base64
您可以将图像存储为JSON文件中的base64字符串,然后应用程序需要这些字符串。这就意味着你已经在base64中使用了它们(这样应用程序就不需要进行任何转换),但是你又会增加应用程序的大小。如果它只是一小部分图像,那么它可能是最简单的选项。