Я разрабатываю небольшой React Native POC с хранилищем Firebase, в котором пользователь выбирает изображение и загружает его в хранилище Firebase в каталоге /uid/
.Я использую react-native-firebase
для использования firebase в приложении.
У меня есть uri
изображения, с помощью которого я создаю его BLOB-объект, используя RNFetchBlob
, а затем пытаюсь загрузить BLOB-объект в Firebase.
Вот код для обработки создания и загрузки BLOB-объектов.
handleUploadTask = (mime = 'application/octet-stream') => {
const {imageSource} = this.state;
this.setState({uploading: true});
const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;
fs.readFile(imageSource.uri, 'base64')
.then((data) => {
return Blob.build(data, { type: `${mime};BASE64` })
}).then(blob => {
console.log('going to upload');
this.uploadBlobToFirebase(blob);
}).catch(error => {
console.error('fs error:', error);
})
}
, а здесь uploadBlobToFirebase
uploadBlobToFirebase = (blob) => {
const currentUserId = firebase.auth().currentUser.uid;
const path = `/${currentUserId}/`;
const unsubscribe = firebase.storage().ref(path).putFile(blob).on(
firebase.storage.TaskEvent.STATE_CHANGED,
(snapshot) => {
const progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
//restricting progress to be shown with only 0,2,4,... 98, 100.
if (progress % 2 == 0) {
this.setState({
uploadProgress: progress
})
}
if (snapshot.state === firebase.storage.TaskState.SUCCESS) {
this.setState({
uploading: false,
}, () => {
//TODO: should also add this image to flatlist.
//Get download url and set to image in flatlist.
Alert.alert('Upload completed');
})
}
},
(error) => {
this.setState({
uploading: false,
}, ()=>{
unsubscribe();
console.error(error);
})
},
);
}
Функция handleUploadTask
вызывается наonPress кнопки загрузки и работает нормально до console.log('going to upload')
, а затем попадает в перехват с ошибкой:
'fs error:', {[TypeError: undefined не является функцией (оценивает ')filePath.replace ('file: //', '') ')] строка: 115903, столбец: 41, sourceURL:' http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false'}
Я здесь абсолютно пуст.Не удалось найти file.replace
, который вызывает проблему и почему.Любая помощь будет оценена.Спасибо.