Estoy tratando de cargar la imagen seleccionada desde mi teléfono, usando la biblioteca ImagePicker:
const [bookName, setBookName] = useState(""); const [bookAuthor, setBookAuthor] = useState(""); const [selectedPhoto, setSelectedPhoto] = useState(); const selectPhoto = async () => { let permissionResult = await ImagePicker.requestMediaLibraryPermissionsAsync(); if (permissionResult.granted === false) { Alert.alert("Permission to access camera roll is required!"); return; } let pickerResult = await ImagePicker.launchImageLibraryAsync(); if (pickerResult.cancelled === true) { return; } setSelectedPhoto(pickerResult); }; const uploadBook = async () => { if (selectedPhoto && bookName !== "" && bookAuthor !== "") { const storage = getStorage(); const uploadUri = Platform.OS === 'ios' ? selectedPhoto.uri.replace('file://', '') : selectedPhoto.uri; let bookKey = push(ref(db, 'books/'), { name: bookName, author: bookAuthor, label: '', }).key; const booksRef = sRef(storage, "books/" + bookKey + '.jpg'); await uploadBytes(booksRef, uploadUri).then(() => { update(ref(db, 'books/' + bookKey), { name: bookName, author: bookAuthor, label: bookKey + '.jpg', }) }); } };Todo funciona bien, excepto cargar archivos. Tengo un archivo en el almacenamiento, cuyo contenido es 'indefinido'. Entonces, ¿cómo cargar archivos correctamente?
PD: el archivo está realmente disponible, ya que lo muestro después de elegir
<Image source={{ uri: selectedPhoto.uri }} style={{ width: "100%", height: "100%", resizeMode: "contain" }} />Si revisa la documentación para uploadBytes , acepta: Blob | Uint8Array | ArrayBuffer . Por lo tanto, no espera un valor de URL/cadena.
Deberá crear una referencia Blob al archivo seleccionado o leer los bytes de ese archivo y pasarlos a Firebase como un ArrayBuffer .