Ошибка: хранилище / объект не найден при попытке загрузить большой файл изображения - PullRequest
0 голосов
/ 20 января 2019

Я получаю сообщение об ошибке: хранилище / объект не найден при попытке загрузить большой файл изображения в Google Cloud Storage с использованием RxFire.

Говорят, что изображение не найдено в корзине, но когда я проверяю, я вижу их!

Я тестировал с маленькими изображениями (вероятно, 100 КБ ...) отлично работает.

Но попробовал с> 500kb изображениями, не работает ...

upload$
  .pipe(
    switchMap((event: any) => {
      const name = Math.random().toString(36).substring(5);
      const blob = event.target.files[0];
      const type = blob.type.replace('image/', '');
      const ref = storage.ref(`uploads/test/${name}.${type}`);
      return put(ref, blob);
    }),
    map(snapshot => snapshot),
    filter(snapshot => snapshot.totalBytes === snapshot.bytesTransferred),
    mergeMap(snapshot => getDownloadURL(snapshot.ref))
  )
  .subscribe(url => {
    console.log('Results', url)
  }, (error) => {
    // ERROR HERE
    console.log('error', error)
  })

Ожидаемый результат: загрузка с большими изображениями

Фактические результаты: Ошибка

Uncaught t {code_: "storage/object-not-found", message_: "Firebase . 
Storage: Object 'uploads/test/7xpbilmb.jpeg' does not exist.", 
serverResponse_: "{↵  "error": {↵    "code": 404,↵    "message": 
"Not Found.  Could not get object"↵  }↵}", name_: "FirebaseError"}

1 Ответ

0 голосов
/ 04 июня 2019

Вы можете сделать это обоими способами.

  1. Обещания

     storageRef.put(blob, {customMetadata}).then(data => {
                    data.ref.getDownloadURL().then(url => {
                        // do whatever you want with url
                    });
                });
    
  2. 1010 * наблюдаемые характеристики *

    downloadURL = new Subject();
    this.downloadURL.pipe(
                    map(obs => obs),
                    concatAll()
                ).subscribe(url => {
                    // do whatever you want with url
                });
    
    let task = ref.put(blob, {customMetadata});
    task.snapshotChanges().pipe(
                    finalize(() => this.downloadURL.next(ref.getDownloadURL()))
                ).subscribe();
    

Этого должно быть достаточно, чтобы получить ваш downloadURL. Если вы хотите отслеживать прогресс загрузки с помощью наблюдаемых, вот код для этого:

task.percentageChanges().subscribe(progress => {
                console.log('upload progress: ', progress);
                if (res >= 100) {
                    // HOORAY!
                }
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...