如何从本地存储读取文件?

时间:2019-02-04 16:07:53

标签: react-native

我正在将图像上传到设备的本地存储(Android),任务成功完成,现在 当我尝试从本地存储读取文件时遇到问题,它弹出错误 说:

  

不变违规对象不是有效的React子对象

这是我上传图片的代码:

let dirs = RNFetchBlob.fs.dirs;
RNFetchBlob.fs.exists(dirs.PictureDir + "/myfolder")
    .then((exist) => {
            //console.log(`file ${exist ? '' : 'not'} exists`);
            if (!exist) {
                try {
                    const fs = RNFetchBlob.fs;
                    /
                    RNFetchBlob.fs.mkdir(dirs.PictureDir + "/myfolder")
                        .then(() => {
                                let base64Str = data;
                                fs.writeFile(dirs.PictureDir + "/myfolder/" + imageName, base64Str, 'base64')
                                    .then(() => {
                                        RNFetchBlob.fs.scanFile([{
                                            path: dirs.PictureDir + "/myfolder/",
                                            mime: 'jpeg/jpg'
                                        }]);
                                    }).catch(() => {
                                        alert("error");
                                    })

这是我的图片的路径

  

const path =   dirs.PictureDir +“ / myfolder / 1718179779c718ba84098b90f6061816fba9f.jpg”

这里是我访问该图片的代码,请您帮忙

<ScrollView keyboardShouldPersistTaps="handled">

        <View style={styles.containerWithMargin} >
        {RNFetchBlob.fs.readFile(path, 'base64') .then( (data) =>
             <Avatar
             medium
             onPress={this.onSelectPostImage.bind(this)}
             source={{uri : data}}
           />
        )}

        </View>

1 个答案:

答案 0 :(得分:1)

RNFetchBlob.fs.readFile返回一个Promise,任何异步内容都应该在ComponentDidMount中,然后您可以使用setState来设置imageUrl,例如,在jsx中,您将拥有一些东西像这样

<View style={styles.containerWithMargin} >
{imageUrl && 
   <Avatar
         medium
         onPress={this.onSelectPostImage.bind(this)}
         source={{uri : imageUrl}}
       />
}
</View