【发布时间】:2019-03-18 18:55:49
【问题描述】:
我正在尝试允许用户将图像上传到 Firebase 实时数据库。 我已经使用了“rn-fetch-blob”和“react-native-fetch-blob”,但无法让它工作。
通过此功能选择照片并将其保存为头像状态。
selectPhoto() {
const options = {
quality: 1.0,
maxWidth: 500,
maxHeight: 500,
storageOptions: {
skipBackup: true
}
};
ImagePicker.showImagePicker(options, (response) => {
if (response.didCancel) {
console.log('User cancelled photo 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 source = { uri: response.uri };
this.setState({ avatar: source });
}
})
}
uploadPhoto 然后尝试将其上传到 Firebase,但在“RNFetchBlob.fs.readFile”行出现“缺少参数 'path'”错误
uploadPhoto(mime = 'application/octet-stream') {
return new Promise((resolve, reject) => {
const uploadUri = this.state.avatar;
let uploadBlob = null
console.log('uid' + this.state.uid);
const imageRef = firebase.storage().ref('applicants' + this.state.uid).child('profile_pic');
console.log(this.state.avatar);
RNFetchBlob.fs.readFile(this.state.avatar, 'base64')
.then((data) => {
return Blob.build(data, { type: `${mime};BASE64` })
})
.then((blob) => {
uploadBlob = blob
return imageRef.put(blob_ref, blob, { contentType: mime })
})
.then(() => {
uploadBlob.close()
return imageRef.getDownloadURL()
})
.then((url) => {
resolve(url)
})
.catch((error) => {
alert(error.message);
reject(error);
})
})
}
【问题讨论】:
-
通话时
this.state.avatar的具体内容是什么? -
@DougStevenson 它显示为 file:///storage/emulated/0/Android/data/com.jobsearch/files/Pictures/image-e4d88136-ac45-4f5b-81e3-f0d394343e59.jpg
-
这是 readFile 的有效路径吗?
标签: reactjs firebase react-native native firebase-storage