Проблема с загрузкой изображений в хранилище Firestore - PullRequest
0 голосов
/ 29 декабря 2018

Я хочу загрузить изображение и загрузить и загрузить поле в документе пожарного депо, чтобы в нем сохранялось изображение URL.

Для этого у меня есть следующий код: В этом снимке используется камера.

selectImage(): Promise<any> {
    return new Promise(resolve => {
        let cameraOptions: CameraOptions = {
            destinationType: this.camera.DestinationType.DATA_URL,
            encodingType: this.camera.EncodingType.JPEG,
            correctOrientation: true
        };

        this.camera.getPicture(cameraOptions)
            .then((data) => {
            this.cameraImage = "data:image/jpeg;base64," + data;
            resolve(this.cameraImage);
        });
    });
}

Этот файл загружает изображение, а затем обновляет документ с настройкой URL.

uploadProfilePhoto() {
    console.log(this.cameraImage)
    if (this.cameraImage != null) {


        this.image = 'profilePhoto' + new Date().getTime() + '.jpg';
        let storageRef: any;
        let parseUpload: any;
        storageRef = firebase.storage().ref('profilePhotos/' +
        this.image);
        parseUpload = storageRef.putString(this.cameraImage,
        'data_url');
        let ID = firebase.auth().currentUser.uid;
        console.log("ID")
        console.log(ID);
        parseUpload.on('state_changed', (snapshot) => {
            // Upload completed successfully, now we can get the
            download URL
            snapshot.ref.getDownloadURL().then((downloadURL) => {
                let profilePhoto = downloadURL
                this.firestore.doc(`users/${ID}`).update({
                    profilePhoto
                })
            });

        })
    }
}

Когда я запускаю этот код, он отлично загружает изображение, однако иногда оно не обновляетсядокумент, и я не могу найти причину.Я получаю эту ошибку:

Не удалось загрузить ресурс: сервер ответил со статусом 404

Если я ввожу ссылку, эта ошибка показывает, что это показывает это.

И это не появляется только 1 раз, каждый раз, когда я запускаю этот код, эта ошибка появляется как 3-4 раза.

1 Ответ

0 голосов
/ 29 декабря 2018

В сообщении, которое вы получаете, указано «404», которое обычно понимается как код ответа HTTP, означающий «не найден».Ошибка говорит вам, что когда вы вызываете getDownloadURL, файл фактически отсутствует.Это связано с тем, что вы еще не ожидали окончания загрузки файла.

Когда возвращается storageRef.putString(), файл еще не начал загружаться.Из связанных документов API видно, что он возвращает объект UploadTask , который работает как Promise, поскольку у него есть метод then ().Вам нужно использовать эту UploadTask, чтобы определить, когда загрузка завершена.Только тогда getDownloadURL будет работать так, как вы ожидаете.

...