10 votes

Le téléchargement de fichiers vers Firebase Storage échoue avec une erreur inconnue

Je suis en train d'utiliser react-native-firebase pour travailler avec notre compte Firebase pour l'authentification, firestore et le stockage. En essayant de télécharger une photo dans le stockage, une erreur inconnue se produit. Voici le code testé :

_pickImage = async () => {
  await this.getCameraRollPermission()
  let result = await ImagePicker.launchImageLibraryAsync({
    allowsEditing: true,
    aspect: [4, 3],
  });

  console.log(result);

  if (!result.cancelled) {
    // this.setState({ photoURL: result.uri });
    this._handlePhotoChoice(result)
  }
};

_handlePhotoChoice = async pickerResult => {
  let userId = this.state.userId
  firebase
    .storage()
    .ref('photos/profile_' + userId + '.jpg')
    .putFile(pickerResult.uri)
    .then(uploadedFile => {
      console.log("Photo de profil Firebase téléchargée avec succès")
    })
    .catch(error => {
      console.log("Échec du téléchargement du profil Firebase : " + error)
    })
}

En testant dans le simulateur iOS et en utilisant le débogueur pour détecter les erreurs, je reçois simplement cette erreur :

"Erreur : Une erreur inconnue s'est produite.
à createErrorFromErrorData (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2371:17)
à blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2323:27
à MessageQueue.__invokeCallback (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2765:18)
à blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2510:18
à MessageQueue.__guardSafe (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2678:11)
à MessageQueue.invokeCallbackAndReturnFlushedQueue (blob:http://localhost:19001/e9d43477-4e42-4f7a-b494-16485def4c28:2509:14)
à http://localhost:19001/debugger-ui/debuggerWorker.js:70:58"

MISE À JOUR :

Un fichier est téléchargé dans le bucket de stockage, mais ce fichier n'est pas la photo JPEG, mais est en réalité du contenu JSON sur le fichier :

{"contentType":"image\/jpeg","name":"photos\/profile_XPIO2lHjlYbdLPchACZHBsmY9Jr1.jpg"}

De cette façon, un fichier JSON se retrouve dans le bucket au lieu de la photo réelle, ce qui provoque ensuite l'erreur.

Il semble que ce problème soit suivi à plusieurs reprises, mais n'est pas résolu :

https://github.com/invertase/react-native-firebase/issues/1177

https://github.com/invertase/react-native-firebase/issues/302

1voto

davidethell Points 9385

Enfin trouvé mon problème. L'URI de l'image provenant de l'ImagePicker contenait un caractère '%' de la mémoire cache locale de l'application. Ce pourcentage était encodé en URI en '%25', ce qui empêchait le fichier d'être trouvé par le code putFile. Ajouter un appel decodeURI autour de l'URI a résolu le problème.

let fileUri = decodeURI(pickerResult.uri)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X