Este es el código para cargar la imagen en la aplicación React. Se muestra en el almacenamiento de base de fuego pero no se agrega a la tienda de fuego en la nube. y es por eso que no puedo cargar ninguna imagen en la aplicación React manualmente. He buscado en Google y buscado tantas veces, pero no puedo arreglar esto.
function Imgupload({username}){ **strong text** const [caption,setCaption]=useState(''); const [image,setImage]=useState(null); //const [url,setUrl]= useState(""); const [progress,setProgress]=useState(0); const handlechange = (e)=>{ if(e.target.files[0]){ setImage(e.target.files[0]); } }; const handleUpload = () =>{ const uploadTask= storage.ref('images/$ {image.name}').put(image); uploadTask.on( "state_change", (snapshot) =>{ //progress function.. const progress=Math.round( (snapshot.bytesTransferred/snapshot.totalBytes) * 100 ); setProgress(progress); }, (error) =>{ //error func.. console.log(error); alert(error.message); }, ()=>{ //complete func.. storage .ref("images") .child(image.name) .getDownloadURL() .then (url =>{ //post img on db.. db.collection("posts").add({ timestamp:firebase.firestore.FieldValue.serverTimestamp(), caption :caption, imgurl :url, username :username }); setProgress(0); setCaption(""); setImage(null); }); } ); }Este es el error de la consola:
localhost/:1 Uncaught (in promise) FirebaseError: Firebase Storage: Object 'images/Screenshot (202).png' does not exist. (storage/object-not-found) { "error": { "code": 404, "message": "Not Found."`enter code here` } }No se puede solucionar este problema. por favor ayuda.
Tienes un espacio extra en el nombre del archivo aquí:
const uploadTask= storage.ref('images/$ {image.name}').put(image); // 👆 No tienes ese mismo espacio cuando llamas a getDownloadURL aquí:
storage .ref("images") .child(image.name) .getDownloadURL()Entonces, estos dos fragmentos de código apuntan a archivos diferentes, lo que explica por qué el segundo fragmento no puede encontrar el archivo que cargó.
Recomiendo usar una sola variable para contener la referencia, y usarla en ambos fragmentos:
const imageRef = storage .ref("images") .child(image.name); const uploadTask= imageRef.put(image); ... imageRef.getDownloadURL()...