由于先前的图像正在上传到服务器,因此状态不会同时更新

如何解决由于先前的图像正在上传到服务器,因此状态不会同时更新

我正在使用 AWS S3 存储桶将图像上传到服务器并从服务器获取响应作为图像 URL,然后我将其存储到数据库中,但由于状态未在存储先前响应的同时更新

我的代码在这里

const EditProfileScreen = ({ navigation,userdetails,adduser,imageUrl,addimage }) => {
    const [isModalVisible,setModalVisible] = useState(false);
    const [isChoosen,setChoosen] = useState(false);
    const [isLoading,setLoading] = useState(false);
    const [picture_url,setPictureUrl] = useState('');
    const [availableData,setAvailableData] = useState({
        name: userdetails.name,email: userdetails.email,zipcode: userdetails.zipcode,address: userdetails.address,phone: userdetails.phone,picture_url : userdetails.picture_url
    })
    const [selectedIMage,setSelectedimage] = useState({
        imageType : imageUrl.type,imageName : imageUrl.fileName,imagePath : imageUrl.uri
    })
    const handleImageChange = (awsImageurl) => {
        setPictureUrl(awsImageurl)
    } 
    const handleCaptureImage = (imgDetails) => {
        setSelectedimage({
            imagePath : imgDetails.uri,imageName : imgDetails.fileName,imageType : imgDetails.type
        })
    }

    const showToast = (alert) => {
        ToastAndroid.showWithGravity(
            alert,ToastAndroid.LONG,ToastAndroid.BOTTOM
        );
    };
    async function uploadToS3() {
        setLoading(true);

        const file = {
            uri: selectedIMage.imagePath,name: selectedIMage.imageName,type: selectedIMage.imageType
        }

        const options = {
            keyPrefix: "profile_pics/",bucket: "bucket",region: "ap-south-1",accessKey: "**********",secretKey: "***********",successActionStatus: 201
        }

        try {
            const response = await RNS3.put(file,options)
            if (response.status === 201) {
                console.log("Success: ",response.body);
                handleImageChange(response.body.postResponse.location);
                setLoading(false);

            } else {
                console.log("Failed to upload image to S3: ",response)
                setLoading(false);
            }
        } catch (error) {
            console.log("inside catch error",error)
            setLoading(false);
        }
    }

    const editUserDetails = async () => {
        setLoading(true);
        try {
            let user_id = null;
            let token = null;
            user_id = await AsyncStorage.getItem('user_id');
            token = await AsyncStorage.getItem('userToken');
            const pic_url = picture_url;
            var qs = require('qs');
            var data = qs.stringify({
                'name': availableData.name,'email': availableData.email,'zipcode': availableData.zipcode,'address': availableData.address,'phone': availableData.phone,'picture_url': pic_url
            });
            var config = {
                method: 'patch',url: `/users/${user_id}`,headers: {
                    'Authorization': `Bearer ${token}`,'Content-Type': 'application/x-www-form-urlencoded'
                },data: data
            };
            console.log("userId:",user_id);
            if (user_id != null) {
                axios(config)
                    .then((response) => {
                        console.log(response.data.data);
                        adduser(response.data.data);
                        setTimeout(() => {
                            setLoading(false)
                            showToast(response.data.message);
                            navigation.navigate('ProfileScreen');
                        },1000);
                    },(error) => {
                        console.log(error.response);
                        setLoading(false);
                    });
            }
        } catch (e) {
            console.log(e);
        }
    }

    const requestCameraPermission = async () => {
        if (Platform.OS === 'android') {
            try {
                const granted = await PermissionsAndroid.request(
                    PermissionsAndroid.PERMISSIONS.CAMERA,{
                        title: 'Camera Permission',message: 'App needs camera permission',},);
                // If CAMERA Permission is granted
                return granted === PermissionsAndroid.RESULTS.GRANTED;
            } catch (err) {
                console.warn(err);
                return false;
            }
        } else return true;
    };

    const requestExternalWritePermission = async () => {
        if (Platform.OS === 'android') {
            try {
                const granted = await PermissionsAndroid.request(
                    PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE,{
                        title: 'External Storage Write Permission',message: 'App needs write permission',);
                // If WRITE_EXTERNAL_STORAGE Permission is granted
                return granted === PermissionsAndroid.RESULTS.GRANTED;
            } catch (err) {
                console.warn(err);
                alert('Write permission err',err);
            }
            return false;
        } else return true;
    };
    const captureImage = async (type) => {
        let options = {
            mediaType: type,maxWidth: 300,maxHeight: 550,quality: 1,videoQuality: 'low',durationLimit: 30,//Video max duration in seconds
            saveToPhotos: true,};
        let isCameraPermitted = await requestCameraPermission();
        let isStoragePermitted = await requestExternalWritePermission();
        if (isCameraPermitted && isStoragePermitted) {
            launchCamera(options,(response) => {
                handleCaptureImage(response);
                console.log('Response = ',response);

                if (response.didCancel) {
                    let alrt = "User cancelled camera picker";
                    showToast(alrt);
                    return;
                } else if (response.errorCode == 'camera_unavailable') {
                    let alrt = "Camera not available on device";
                    showToast(alrt);
                    return;
                } else if (response.errorCode == 'permission') {
                    let alrt = "Permission not satisfied";
                    showToast(alrt);
                    return;
                } else if (response.errorCode == 'others') {
                    showToast(response.errorMessage);
                    return;
                }
                console.log('base64 -> ',response.base64);
                console.log('uri -> ',response.uri);
                console.log('width -> ',response.width);
                console.log('height -> ',response.height);
                console.log('fileSize -> ',response.fileSize);
                console.log('type -> ',response.type);
                console.log('fileName -> ',response.fileName);
                addimage(response);

                if (imageUrl) {
                    setChoosen(true)
                    setModalVisible(!isModalVisible);
                    setTimeout(() => {
                        uploadToS3();
                    },2000);
        
                }
                else {
                    setChoosen(false)

                }
            });
        }
    };
    const chooseFile = (type) => {
        let options = {
            mediaType: type,};
        launchImageLibrary(options,(response) => {
            console.log('Response = ',response);
            handleCaptureImage(response) 
            if (response.didCancel) {
                let alrt = "User cancelled camera picker";
                showToast(alrt);
                return;
            } else if (response.errorCode == 'camera_unavailable') {
                let alrt = 'Camera not available on device';
                showToast(alrt);
                return;
            } else if (response.errorCode == 'permission') {
                let alrt = 'Permission not satisfied';
                showToast(alrt);
                return;
            } else if (response.errorCode == 'others') {
                showToast(response.errorMessage);
                return;
            }
            console.log('base64 -> ',response.base64);
            console.log('uri -> ',response.uri);
            console.log('width -> ',response.width);
            console.log('height -> ',response.height);
            console.log('fileSize -> ',response.fileSize);
            console.log('type -> ',response.type);
            console.log('fileName -> ',response.fileName);
            addimage(response);

            if (imageUrl) {
                setChoosen(true)
                setModalVisible(!isModalVisible);
                setTimeout(() => {
                    uploadToS3();
                },2000);
            }
            else {
                setChoosen(false)
            }
        });
    };


   

const mapStateToProps = (state) => {
    console.log(state);
    return {
        userdetails: state.userReducer.userProfile,imageUrl : state.userReducer.imageUrl
    }
}

const mapDispatchToProps = (dispatch) => {
    console.log(dispatch)
    return {
        adduser: (details) => dispatch(addUser(details)),addimage: (image_url) => dispatch(addImageToUpload(image_url))
    }
}
export default connect(mapStateToProps,mapDispatchToProps)(EditProfileScreen)

我正在使用 redux 来存储数据并从 redux 中获取用户详细信息,我希望同时更新状态,以便将实际响应存储到数据库中,并且如果第一次上传它会抛出错误,因为它不是获取上传到 AWS s3 服务器的详细信息。 任何建议或帮助? 提前致谢

解决方法

也许您可以将异步中间件用于 redux 作为 Redux Thunk。 然后,您将能够使您的操作分派为异步。

,

我得到了解决方案 我没有将相机或照片库中捕获的数据存储到状态,而是直接将数据发送到 s3 存储桶中,并且工作正常

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res