我正在将图像上传到设备的本地存储(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>
答案 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