Я пытаюсь разрешить пользователю загружать изображение в базу данных Firebase в реальном времени.
Я использовал оба «rn-fetch-blob» и «response-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»
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);
})
})
}