Я пытаюсь загрузить изображения из моего собственного приложения в облачное хранилище хранилище . Загрузка действительно успешна, и метод, который я опубликую ниже, работает. Проблема в том, что этот метод как-то ломает мое приложение, и тогда я не могу написать в свою коллекцию в firestore database . Откуда я это знаю? Потому что, когда я отключаю вызов этой функции, работает вызов другого метода «SAVE», и я могу записать свой документ в коллекции Firestore. Только если этот метод выполняется и я загружаю изображение в хранилище firebase 1006 *, запись в хранилище firestore database прекращается. Интересно, это проблема с RNFetchBlob ?
Я был бы очень признателен за любую помощь на этом этапе.
Спасибо!
uploadImage(uri, mime, name) {
console.log("inside uploadImage function");
try{
const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;
var imgUri = uri;
var uploadBlob = null;
const uploadUri = Platform.OS === 'ios' ? imgUri.replace('file://', '') : imgUri;
var imageKey = (this.state.currentImageIndex).toString();//this.guidGenerator();
var imageRef = firebase.storage().ref(`/images/${imageKey}`);
fs.readFile(uploadUri, 'base64')
.then(data => {
return Blob.build(data, { type: `${mime};BASE64` });
})
.then(blob => {
uploadBlob = blob;
var uploadTask = imageRef.put(blob, { contentType: mime, name: name });
uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED, // or 'state_changed'
(snapshot) => {
// Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded
var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
console.log('Upload is ' + progress + '% done');
switch (snapshot.state) {
case firebase.storage.TaskState.PAUSED: // or 'paused'
console.log('Upload is paused');
break;
case firebase.storage.TaskState.RUNNING: // or 'running'
console.log('Upload is running');
break;
}
}, (error) => {
console.log(error);
// A full list of error codes is available at
// https://firebase.google.com/docs/storage/web/handle-errors
switch (error.code) {
case 'storage/unauthorized':
// User doesn't have permission to access the object
break;
case 'storage/canceled':
// User canceled the upload
break;
case 'storage/unknown':
// Unknown error occurred, inspect error.serverResponse
break;
}
}, () => {
// Upload completed successfully, now we can get the download URL
uploadTask.snapshot.ref.getDownloadURL().then((downloadURL)=> {
try{
console.log('File available at', downloadURL);
uploadBlob.close();
fs.unlink(uploadUri);
console.log("blob closed");
this.setState({currentImageIndex:this.state.currentImageIndex+1}, ()=>{
if(this.state.pickType ==='multi'){
if(this.state.currentImageIndex<this.state.totalNumImages){
console.log("call openCropper");
this.openCropper();
}else{
this.setState({totalNumImages:0});
this.setState({currentImageIndex:0});
}
}
});
}catch(err){
console.log(err);
}
}).catch((err)=>{
console.log(err);
});
});
})
.catch((err)=>{
console.log("ERROR READING FILE: fs.readFile!!");
console.log(err);
});
}
catch(err){
console.log(err);
}
}