React Native Firebase 多张图片上传问题

Posted

技术标签:

【中文标题】React Native Firebase 多张图片上传问题【英文标题】:React Native Firebase Multiple Image Upload Problem 【发布时间】:2021-08-11 08:59:50 【问题描述】:

在 React Native 中,我使用 ImagePicker 包选择图像并将图像上传到 Firebase 存储。我还想通过 Firebase Rest Api 使用 Getdownloadurl() 方法发送 Firebase 存储图像链接。

我设法上传图片,但是当我通过发出 rest api 发布请求来发送它们时,图片链接变为 未定义。 我正在从控制台屏幕发出没有 100% 的发布请求的总图像大小。

const uploadImage = async (uploadUri: string, transferred: number) => 
    let filename = uploadUri.substring(uploadUri.lastIndexOf('/') + 1);
    transferred = 0;
    const storageRef = storage().ref(`images/$filename`);
    const task = storageRef.putFile(uploadUri);
    task.on('state_changed', taskSnapshot => 
        console.log(`$taskSnapshot.bytesTransferred transferred out of $taskSnapshot.totalBytes`);
        transferred = Math.round((taskSnapshot.bytesTransferred / taskSnapshot.totalBytes) * 100);
    );
    try 
        await task;
        const url = await storageRef.getDownloadURL();
        return url;
     catch (error) 
        console.log(error);
        return null;
    


export const addPost = (files: string[], post: Post): ThunkAction<void, RootState, null, AddPostAction> => 
    return async dispatch => 
        try 
            dispatch( type: ADD_POST_LOADING, payload: true );
            const imageData: Image[] = [];
            files.map(async (item) => 
                const imageUrl = await uploadImage(item, 0);
                imageData.push( image: imageUrl! );
            );
            const postData: Post = 
                ...post,
                thumb: imageData[0].image
            
            const response = await fetch(`$BASE_URL/post.json`,  method: "POST", body: JSON.stringify(postData) );
            if (response.ok) 
                const successPostData: AddPostSuccess = await response.json();
                dispatch( type: ADD_POST_SUCCESS, payload: successPostData );
             else 
                dispatch( type: ADD_POST_ERROR, payload: "404" );
            

         catch (error) 
            console.log(error);
        
    

【问题讨论】:

【参考方案1】:

map 无法处理 async 代码。尝试更改这部分:

 files.map(async (item) => 
                const imageUrl = await uploadImage(item, 0);
                imageData.push( image: imageUrl! );
            );

到这里:

for (let i = 0; i < files.length; i++) 
              const item = files[i];
              const imageUrl = await uploadImage(item, 0);
                imageData.push( image: imageUrl! ); 
            

【讨论】:

以上是关于React Native Firebase 多张图片上传问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-native-firebase 创建 Firebase 动态链接失败 - React Native

用 react-native-firebase 编译 react-native

哪个 Firebase javascript 包应该与 React Native 一起使用?常规的“Firebase Web SDK”还是“react-native-firebase”?

使用 react-native-firebase 在 React Native 上自定义通知

react native [[DEFAULT]] firebaseapp 未初始化 react-native-firebase

在 react-native 和 firebase 3.1 中登录 Facebook