Этот метод, кажется, нарушает мой реактивный код - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь загрузить изображения из моего собственного приложения в облачное хранилище хранилище . Загрузка действительно успешна, и метод, который я опубликую ниже, работает. Проблема в том, что этот метод как-то ломает мое приложение, и тогда я не могу написать в свою коллекцию в 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);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...