【发布时间】:2018-07-02 19:59:59
【问题描述】:
我尝试在我的 react-native 应用中显示图像。我已将照片上传到 我的 Firebase 存储,它的工作。然后我尝试从 Firebase Storage 显示我的图像,但文件是 blob。我想将 blob 转换为图像,但我不知道语法。可能是你们中的一个人可以帮助我解决这个问题。
我应该在哪里放置 RNFetch blob?我尝试将其放入 componentWillMount 并显示错误。
uploadImage(uri, mime = 'application/octet-stream') {
return new Promise((resolve, reject) => {
const uploadUri = uri
let uploadBlob = null
const imageRef = firebase.storage().ref('profileImg').child(`${this.state.user.uid}/Profile Image - ${this.state.user.uid}`)
fs.readFile(uploadUri, 'base64')
.then((data) => {
return Blob.build(data, { type: `${mime};BASE64` })
})
.then((blob) => {
uploadBlob = blob
return imageRef.put(blob, { contentType: mime })
})
.then(() => {
uploadBlob.close()
return imageRef.getDownloadURL()
})
.then((url) => {
console.log(url)
resolve(url)
})
.catch((e) => {
console.log(e)
reject(e)
})
})
}
getProfileImage(){
let options = {
title: 'Choose Photo',
storageOptions: {
skipBackup: true,
path: 'images'
}
};
ImagePicker.showImagePicker(options, (response) => {
console.log('Response = ', response);
if (response.didCancel) {
console.log('User cancelled image picker');
}
else if (response.error) {
console.log('ImagePicker Error: ', response.error);
}
else if (response.customButton) {
console.log('User tapped custom button: ', response.customButton);
}
else {
let image_uri = { uri: 'data:image/jpeg;base64,' + response.data };
this.uploadImage(response.uri)
.then((url) => {
console.log('uploaded')
this.setState({
image_uri: url,
});
})
.catch((error) => console.log(error))
firebase.auth().currentUser.updateProfile({
photoURL: this.state.image_uri
});
}
})
}
【问题讨论】:
-
可能使用数据 uri - 你看过 Blob 文档吗? developer.mozilla.org/en-US/docs/Web/API/Blob
-
我不太了解您提供的链接。我实际上看过这个链接github.com/wkh237/react-native-fetch-blob。但我不知道我应该在哪里放置 RN fetch blob。
-
当我发布评论时,您的问题中没有代码,所以这是一个广泛的建议
-
是的,我忘了在问题中发布代码。
标签: javascript reactjs react-native firebase-storage