от
Я пытаюсь получить URL для загрузки, чтобы я мог передать его в обещании в функции, которую я вызываю. В хранилище загружен образ, но каким-то образом я получаю сообщение об ошибке в строке, где я console.log - ошибка 404, как будто она не существует (но она существует)
uploadFile = (file, metadata) => {
    const pathToUpload = this.state.channel.id; 
    const ref = this.props.messagesRef; 
    const filePath = `chat/public/${uuidv4()}.jpg`; // uuid is a function that creates random string

    this.setState({
      uploadState: 'uploading',
      uploadTask: this.state.storageRef.child(filePath).put(file,metadata)
    },
() => {
       this.state.uploadTask.on('state_changed', snap => {
         const percentUploaded = Math.round((snap.bytesTransferred / snap.totalBytes) * 100)
         this.setState({percentUploaded})
       },
       err => {
         console.error(err)
         this.setState({
           errors: this.state.errors.concat(err),
           uploadState: 'error',
           uploadTask: null
         })
       })  
    },
    () => {
      this.state.uploadTask.snapshot.ref.getDownloadURL().then(downloadUrl => {
        console.log(downloadUrl) // get error
        this.sendFileMessage(downloadUrl, ref, pathToUpload)
      })
      .catch(err => {
        console.error(err)
        this.setState({
          errors: this.state.errors.concat(err),
          uploadState: 'error',
          uploadTask: null
        })
      })
    }
    )
  };

Если вам нужно больше кода, дайте мне знать, но в этой точке, где я регистрирую ошибку, именно в этом проблема. Просто URL размещенного изображения в БД не может быть восстановлен, я пробовал с правилами хранения, но там все выглядит хорошо. РЕДАКТИРОВАТЬ: С состоянием слушателя state_changed состояние не меняется - все время оно остается на «загрузке», пока изображение хранится в хранилище              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Похоже, вы не дожидаетесь завершения загрузки, прежде чем запросить URL для загрузки. Обычно это то, что означает 404 с таким кодом. Вам нужно будет использовать обещание, возвращаемое
storageRef.child(filePath).put(file,metadata)
, чтобы узнать, когда загрузка завершена, и только тогда вы сможете успешно вызвать
getDownloadURL()
по его ссылке.     
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...