我在我的应用程序的本地文件,我这样写的:
<Image source={require("../../img/pic1.jpg") />
如何使用RNFS.readFile(filepath, "base64");
使用RNFS.readFile("../../img/pic1.jpg", "base64");
阅读该文件给我的错误“没有这样的文件”
react-native-fs
将只从设备的存储访问这些文件。所以这个问题带来了困惑。这些文件在制作的时候,所以我们怎么能访问它们的开发与生产捆绑?
├── android
├── app
│ └── assets
│ └── images
└── ios
我存储我里面./app/assets/images/
图片
当开发或调试的文件通过地铁捆绑提供给设备,以便他们实际上并没有存储在设备上。因此,从存储设备访问它们将是不可能的。你将不得不提供某种嘲笑功能,当你正在开发。它可以使用__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不有一个文件夹名为MainBundlePath
,这只是在iOS
。我已经花了一些时间研究和观察设备上的不同文件夹,但我无法访问被捆绑的图像。这似乎是他们没有在我们希望使用react-native-fs
的方式进行访问。
rn-fetch-blob
rn-fetch-blob
有两个ios
和Android
功能从资产目录中读取
要访问iOS
你会做这样的事情的文件:
RNFetchBlob.fs.stat(fs.dirs.MainBundleDir + '/whatever/files/you/added.mp3').then( stats => {...});
而对于Android
你会做这样的事情:
RNFetchBlob.fs.stat(fs.asset('/whatever/files/you/added.mp3').then( stats => {...});
它确实给这个警告有关资产被压缩的摇篮。
摇篮将被默认压缩捆绑资产。为了与此模块资产的文件进行交互,压缩必须禁用。请参阅How to access files from assets更多细节。
这可以解释为什么我使用react-native-fs
看时无法找到Android的任何资产
你可以阅读更多有关使用rn-fetch-blob
及其文件系统在这里https://github.com/joltup/rn-fetch-blob#user-content-file-system
而不是依靠捆绑打包了画面,供各位,把他们的设备上。你可以在iOS
和Android
项目已经存储了它们的副本。这样做的奖金,该图像将是开发用,但是你将存储图像多次,它可能会导致更大的应用规模。
你可以存储图像作为JSON文件的base64字符串,然后由你的应用程序需要这些。那么这将意味着,你将不得不他们已经用base64(这样的应用程序并不需要做任何的转换),但同样你会增加你的应用程序的大小。如果它只是图像的少数也可能是最简单的选项。
只是用文件名= response.uri.replace( '文件:', '')
最后的代码:
if (Platform.OS === 'ios') {
filename = response.uri.replace('file:', '')
} else {
filename = response.uri
}
现在的工作...