1

我是新手,所以这让我很难过。我正在尝试构建一个表单屏幕,允许用户填写他们的详细信息并提供图片。我成功添加了一个平面列表,其中显示了相机捕获的一系列图像。现在我想将图像数组连同详细信息一起发送到 firebase,但我似乎无法让它工作。请帮忙。

    const [title, setTitle] = useState('')
    const [brand, setBrand] = useState('')
    const [modelNo, setModelNo] = useState('')
    const [imeiNo, setImeiNo] = useState('')    
    // Camera
    const [hasCameraPermission, setHasCameraPermission] = useState(null);
    const isFocused = useIsFocused()
    const [cameraRef, setCameraRef] = useState(null);
    const [showCamera, setShowCamera] = useState(false);
    const [imageArray, setImageArray] = useState([]);
    const [imageUri, setImageUri] = useState([]);  
    const [urls, setUrls] = useState("");  
    const [isCameraReady, setIsCameraReady] = useState(false);
    const [cameraType, setCameraType] = useState(Camera.Constants.Type.back);  
    const [cameraFlash, setCameraFlash] = useState(Camera.Constants.FlashMode.off);
    
    useEffect(() => {
        (async () => {
          const cameraStatus = await Camera.requestCameraPermissionsAsync();
          setHasCameraPermission(cameraStatus.status === 'granted');
        })();
      }, []);

    const takePicture = async() => {
        if (cameraRef) {
            const options = {quality: 1, base64: true,};
            const data = await cameraRef.takePictureAsync(options);
            setImageUri(data.uri);
            setImageArray([...imageArray, data.uri]);            
        }
        setShowCamera(false);
    }
    // OnSubmit
    const [requestRunning, setRequestRunning] = useState(false);
    const dispatch = useDispatch();

    const uploadImage = async () => {
        setRequestRunning(true)
        const childPath = `assets/${firebase.auth().currentUser.uid}/mobileDevices/${uuid()}`
        const response = await fetch(imageArray);
        const blob = await response.blob();
        const snapshot = await firebase.storage().ref().child(childPath).put(blob);
        const downloadURL = await snapshot.ref.getDownloadURL();
        return downloadURL;
    }

    const handleSaveAsset = async () => {
        await Promise.all(imageArray.map(p=>uploadImage(imageArray)))
        .then(() => { navigation.dispatch(StackActions.popToTop()) })
        .catch(() =>setRequestRunning(false))
    }```
4

0 回答 0