【问题标题】:Not able to upload image on Firebase Storage无法在 Firebase 存储上上传图片
【发布时间】:2021-08-18 07:22:14
【问题描述】:

我正在尝试在 Firebase 存储中使用 Firebase 上传图片,但文件没有完全上传。只显示9个字节的图片大小,下载后无法预览。

这是我正在使用的代码:-

const [image, setImage] = useState(null)
    const [uploading, setUploading] = useState(false);
    const [transferred, setTransferred] = useState(0);

  const uploadImage = async () => {
    if( image == null ) {
      return null;
    }
    
    const uploadUri = image;
    let filename = uploadUri.substring(uploadUri.lastIndexOf('/') + 1);
    console.log(filename)
    // Add timestamp to File Name
    const extension = filename.split('.').pop(); 
    const name = filename.split('.').slice(0, -1).join('.');
    filename = name + Date.now() + '.' + extension;
    console.log("filename")
    console.log(filename)

    setTransferred(0);

    const storageRef = firebase.storage().ref(`photos/${filename}`);
    console.log("storageRef")
    const task = storageRef.put(uploadUri);
    console.log("storageRef")
    console.log(storageRef)
    // Set transferred state
    task.on('state_changed', (taskSnapshot) => {
      console.log(
        `${taskSnapshot.bytesTransferred} transferred out of ${taskSnapshot.totalBytes}`,
      );

      setTransferred(
        Math.round(taskSnapshot.bytesTransferred / taskSnapshot.totalBytes) *
          100,
      );
      console.log(transferred)
    });

    try {
      await task;

      const url = await storageRef.getDownloadURL();

      setUploading(false);
      setImage(null);

      alert(
        'Image uploaded!',
        'Your image has been uploaded to the Firebase Cloud Storage Successfully!',
      );
      return url;

    } catch (e) {
      console.log(e);
      return null;
    }

  };


  const takephotofrommlib = () => {
    ImagePicker.openPicker({
      width: 300,
      height: 300,
      cropping: true,
    }).then((image) => {
      console.log(image);
      const imageUri = Platform.OS === 'ios' ? image.path : image.path;
      setImage(image.path);
      console.log("image.path")
      console.log(image.path)

    });
  };

我正在使用 react-native-image-crop-picker。我正在使用 Firebase,但不是 react-native firebase。请帮忙!

【问题讨论】:

  • 什么是image?我看到您在uploadImage 的开头检查if (image === null),但我看不到image 的定义位置?
  • @MattU 更新了问题
  • 你试过storageRef.putFile(uploadUri)而不是put吗?

标签: javascript firebase react-native firebase-storage


【解决方案1】:

我只是做一个文件uploadFile.js 这是代码

import storage from "@react-native-firebase/storage";

export default async function uploadFile(ref,fileName,file) {   
  if(!file) return
      const tarea=file
  if (tarea&& tarea.indexOf("http://") == 0 || tarea&&tarea.indexOf("https://") == 0) 
{
    // do something here
    return tarea
  }
  const reference = storage().ref(`${ref}/${fileName}`);
   await reference.putFile(file).catch(err=>{console.log("error upload",err);
   })
  return await storage()
  .ref(`${ref}/${fileName}`)
  .getDownloadURL().catch(err=>{console.log("download eror",err);
  });
}

你可以这样使用 img= await uploadFile('photos',"fileName",filePath)

img可以得到下载地址

【讨论】:

  • 不起作用:(问题仍然存在。上传到firebase的文件大小只有9个字节。
猜你喜欢
  • 2017-09-21
  • 2021-11-21
  • 2016-11-28
  • 2021-06-28
  • 1970-01-01
  • 2020-10-05
  • 2021-01-13
相关资源
最近更新 更多